J'ai fait ça un peu a l'arrache avec des fonctions que j'avais fait. Si ça peut t'aider
(Les deux premières fonction serve juste à gérer les images de tableux plus simplement ça n'a rien a voir) la fonction importante comme tu l'auras compris c EnlightenImage
ProcedureDLL ImageToTable(Image, Table) ; Retourne 1 si l'image a été chargée dans le tableau ImageID=#Image : Table=@Tableau(), ex : Dim Tableau(ImageWidth(), ImageHeight()) -> @Tableau()
If Image >= 0 And Table
ImageID = ImageID (Image)
Hdc = CreateCompatibleDC_ (0) ; GetDC_(WindowID))
If HDC
bmi.BITMAPINFO
bm.BITMAP
GetObject_ ( ImageID , SizeOf(BITMAP), @bm.BITMAP)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiheader\biWidth = bm\bmWidth
bmi\bmiheader\biHeight = bm\bmHeight
bmi\bmiheader\biPlanes = 1
bmi\bmiheader\biBitCount = 32
bmi\bmiheader\biCompression = #BI_RGB
HList = AllocateMemory (bm\bmWidth * bm\bmHeight * 4)
GetDIBits_ (hDC, ImageID , 0, bm\bmHeight, HList, bmi, #DIB_RGB_COLORS )
For nn = 0 To bm\bmWidth - 1
For n = 0 To bm\bmHeight - 1
s = HList + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4
d = Table + n * 4 + nn * bm\bmHeight * 4
CopyMemory (s + 2, d, 1)
CopyMemory (s + 1, d + 1, 1)
CopyMemory (s, d + 2, 1)
Next n
Table + 4
Next nn
FreeMemory (HList)
Else
ProcedureReturn
EndIf
ProcedureReturn 1
EndIf
EndProcedure
ProcedureDLL TableToImage(Image, Table) ; Crée une image à partir du tableau Image=#Image, Table=@Tableau(), ex : Dim Tableau(ImageWidth(),ImageHeight()) -> @Tableau()
If IsImage (Image) And Table
ImageID = ImageID (Image)
bm.BITMAP
GetObject_ ( ImageID , SizeOf(BITMAP), @bm.BITMAP)
bmi.BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiheader\biWidth = bm\bmWidth
bmi\bmiheader\biHeight = bm\bmHeight
bmi\bmiheader\biPlanes = 1
bmi\bmiheader\biBitCount = 32
bmi\bmiheader\biCompression = #BI_RGB
pixel = AllocateMemory (bm\bmHeight * bm\bmWidth * 4)
For nn = 0 To bm\bmwidth - 1
For n = 0 To bm\bmheight - 1
s = Table + n * 4 + nn * bm\bmHeight * 4
d = pixel + nn * 4 + (bm\bmHeight - 1 - n) * bm\bmWidth * 4
CopyMemory (s, d + 2, 1)
CopyMemory (s + 1, d + 1, 1)
CopyMemory (s + 2, d, 1)
Next
table + 4
Next
HDC = StartDrawing ( ImageOutput (image))
SetDIBits_ (HDC, ImageID , 0, ImageHeight (Image), pixel, bmi, #DIB_RGB_COLORS )
StopDrawing ()
FreeMemory (pixel)
ProcedureReturn 1
EndIf
EndProcedure
ProcedureDLL EnlightenImage(Image, Level.f) ; Eclairci l'image, Level doit être compris entre 0 et 1
If IsImage (Image) And Level >= 0 And Level = < 1
ImageID (Image)
WI = ImageWidth (Image)
HI = ImageHeight (Image)
Dim Image(WI, HI)
ImageToTable(Image, Image())
For y = 0 To HI - 1
For x = 0 To WI - 1
color = Image(x, y)
r = Int ((255 - Red (color)) * level + Red (color))
v = Int ((255 - Green (color)) * level + Green (color))
b = Int ((255 - Blue (color)) * level + Blue (color))
Image(x, y) = RGB (r, v, b)
Next
Next
TableToImage(Image, Image())
ProcedureReturn 1
EndIf
EndProcedure
OpenWindow (0, 0, 0, 200, 100, "Test" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget )
CreateGadgetList ( WindowID ( 0))
TrackBarGadget (1, 0,20, 200, 25, 0, 100)
CreateImage (2, 200, 40)
StartDrawing ( ImageOutput (2))
For i=0 To 20
LineXY (0,20+i,200,20+i, RGB (145-i*8,169-i*8,240-i*3))
LineXY (0,20-i,200,20-i, RGB (145-i*8,169-i*8,240-i*3))
Next
StopDrawing ()
CopyImage (2,3)
ImageGadget (2, 0, 60, 200, 40, ImageID (2))
Repeat
event = WaitWindowEvent ()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
CopyImage (3,2)
EnlightenImage(2, GetGadgetState (1)/100)
SetGadgetState (2, ImageID (2))
EndSelect
EndSelect
Until event = #WM_CLOSE