Seulement voilà, alors que je croyais enfin avoir réussi à y faire fonctionner, je m'aperçois que si on manipule les images (ResizeImage() dans mon exemple), mes fonctions perso ne fonctionnent plu.
Voici mon code :
Code : Tout sélectionner
Procedure.l ReverseRGB(Color.l)
ProcedureReturn RGB(Blue(Color),Green(Color),Red(Color))
EndProcedure
Procedure.l PointMemory(Image.l,X.l,Y.l)
Protected bmp.BITMAP,Color.l,Width.l,Height.l,Depth.b,*Address
;On initialise la taille de l'image
Width=ImageWidth(Image)
Height=ImageHeight(Image)
Depth=ImageDepth(Image)/8
;On vérifie les coordonnées
If X<0 Or X>Width-1 Or Y<0 Or Y>Height-1
ProcedureReturn -1
EndIf
;Adresse de l'image
GetObject_(ImageID(Image),SizeOf(BITMAP),@bmp) : *Address=bmp\bmBits
;Récupération de la couleur du point
If *Address
CopyMemory(*Address+X*Depth+Y*Depth*(Width+1),@Color,Depth)
EndIf
;Attention à bien inverser les conventions BGR et RGB
ProcedureReturn ReverseRGB(Color)
EndProcedure
Procedure.b PlotMemory(Image.l,X.l,Y.l,Color.l)
Protected bmp.BITMAP,Width.l,Height.l,Depth.b,*Address
;On initialise la taille de l'image
Width=ImageWidth(Image)
Height=ImageHeight(Image)
Depth=ImageDepth(Image)/8
;On vérifie les coordonnées
If X<0 Or X>Width-1 Or Y<0 Or Y>Height-1
;Echec de l'opération
ProcedureReturn #False
EndIf
;Adresse de l'image
GetObject_(ImageID(Image),SizeOf(BITMAP),@bmp) : *Address=bmp\bmBits
;Inversion de la convention RGB et BGR
Color=ReverseRGB(Color)
;Collage du point dans l'image
If *Address
CopyMemory(@Color,*Address+X*Depth+Y*Depth*(Width+1),Depth)
EndIf
;Réussite de l'opération
ProcedureReturn #True
EndProcedure
CreateImage(0,295,189,24)
CreateImage(1,295,189,24)
ResizeImage(1,590,398,#PB_Image_Raw)
PlotMemory(0,10,10,$FFFFFF)
PlotMemory(1,10,10,$FFFFFF)
SaveImage(0,"image1.bmp")
SaveImage(1,"image2.bmp")

C'est un exemple avec PlotMemory() mais j'ai fait d'autres tests qui me montrent que PointMemory(), fonction très semblable, ne fonctionne pas non plu correctement.