Extrait du lien que tu donnes Guy-lux :
CITATION
The density and scale factor being hard coded, you must not call this function if the device does not have a double density screen, which you can check by calling the SystemInfo.ScreenDensity property, or if the width of the source image expressed in pixels is odd.
Donc, le plus simple pour toi, c'est de créer une image totalement identique qui fait un pixel de plus (ou de moins) avant de passer la moulinette.
En gros, le code doit ressembler à ça :
CODE
Public Function ChangeDensity(ByRef src as Bitmap) as Bitmap
Dim dst as New Bitmap, cx as Integer, cy as Integer, cb as Integer
Dim s as New StreamMemory
cx=src.Width
cy=src.Height
cb=src.BitDepth
if (cx mod 2 = 1) then
' La routine ne fonctionne pas si la largeur est impaire
dim even as new Bitmap
even.Create cx-1,cy,cb,src.Density
even.CopyArea 0,0,cx-1,cy,src,0,0
set src=even
end if
Write s, src
s.Seek 2
Write s, cx/2
Write s, cy/2
Write s, CInt(((CLng(cx)*CLng(cb)+15)/16)*2)
s.Seek 10
Write s, CInt(144)
s.SeekToBegin
Read s, dst
Set ChangeDensity=dst
End Function
Attention, j'ai mis cx-1, ce qui "rogne" le pixel de droite. Si tu mets cx+1, tu ne perds pas d'info, par contre tu peux avoir une couleur bizarre sur la dernière colonne de l'image. A toi de voir.
Edit : Maintenant que j'y réfléchis, tu peux aussi écrire :
CODE
even.Create cx+1,cy,cb,src.Density
even.CopyArea 0,0,cx,cy,src,0,0
even.CopyArea cx+1,0,1,cy,src,cx,0 ' Code pas testé, sensé recopier la dernière colonne de l'image
Petite remarque : Cette moulinette devient obsolète avec la version 2.5 de HB++, puisque la propriété density d'un bitmap n'est plus en lecture seule. Il suffit donc d'écrire :
CODE
bitmap.density = hbDensityDouble
(et je ne sais pas du tout ce qui se passe si le bitmap avait une largeur impaire dans ce cas. Quelqu'un sait ?

)