sauve l'image dans le même répertoire que le code
en haut a gauche l'image d'origine, j'ai fais exprès d'avoir un blanc contenant une couleur très clair peu visible
en bas a gauche la mème image éclaircie et j'ai pris du jpg pour les artefacts dégueulasses de compression
(les images de droite sont la pour montrer le nettoyage avant après plus facilement)
a gauche de la première image la même assombrie tu verra les traits très clairs mais pas blancs apparaitre clairement
en dessous l'image éclaircie puis assombrie dans la même mesure
si ça peux aider
ensuite pour la découpe bien sur tu découpe l'image d'origine hein pas les modifiées
Code : Tout sélectionner
UseJPEGImageDecoder()
Global main=OpenWindow(#PB_Any,0,0,1920,1080,"")
Global ref=LoadImage(#PB_Any,"Image1.jpg")
Global dark=CreateImage(#PB_Any,640,480)
Global dark2=CreateImage(#PB_Any,640,480)
Global light=CreateImage(#PB_Any,640,480)
Global can=CanvasGadget(#PB_Any,0,0,1920,1080)
Procedure getmem(ID) ; copie une image dans la memoire pour y effectuer des operations avec peek et poke :)
ImageID= ImageID(id)
Hdc = CreateCompatibleDC_ ( GetDC_ ( ImageID ))
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 )
ProcedureReturn HList
EndIf
EndProcedure
Procedure putmem(id,mem) ;copie une zone memoire dans une image existante
ImageID= ImageID(id)
Hdc = CreateCompatibleDC_ ( GetDC_ ( ImageID ))
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
SetDIBits_ (hDC, ImageID ,0,bm\bmHeight,mem,bmi, #DIB_RGB_COLORS )
EndIf
EndProcedure
Procedure saturate(memo,satu)
For sat=0 To MemorySize(memo)Step 4
r=PeekB(memo+sat)&$ff + satuhttp://www.purebasic.fr/french/posting.php?mode=reply&f=8&t=16632
v=PeekB(memo+sat+1)&$ff + satu
b=PeekB(memo+sat+2)&$ff + satu
If r>255 : r=255 :EndIf
If v>255 :v=255 :EndIf
If b>255 :b=255 :EndIf
If r<0 : r=0 : EndIf
If v<0 : v=0 : EndIf
If b<0 : b=0 : EndIf
PokeB(memo+sat,r)
PokeB(memo+sat+1,v)
PokeB(memo+sat+2,b)
Next
EndProcedure
; crée un buffer contenant l'image
; light original image
buffer.i=getmem(ref)
saturate(buffer,20)
putmem(light,buffer)
FreeMemory(buffer)
; darken lighten image
buffer.i=getmem(light)
saturate(buffer,-200)
putmem(dark,buffer)
FreeMemory(buffer)
; darken original image
buffer.i=getmem(ref)
saturate(buffer,-200)
putmem(dark2,buffer)
FreeMemory(buffer)
StartDrawing(CanvasOutput(can))
DrawImage(ImageID(ref),0,0)
DrawImage(ImageID(dark2),640,0)
DrawImage(ImageID(light),0,480)
DrawImage(ImageID(dark),640,480)
StopDrawing()
Repeat
ev=WaitWindowEvent()
Until ev=#PB_Event_CloseWindow