Page 1 sur 1
[Func] Modifier les pixels
Posté : mar. 14 oct. 2008 21:03
par tolf
Comme vous le savez peut-être, on peut modifier des images en utilisant les fonctions de GDI+ (commençant par "_GDIPlus_"). Il y a tout un tas de possibilités (dessiner un rectangle avec
_GDIPlus_GraphicsDrawRect, une flèche avec les fonctions
_GDIPlus_ArrowCap...) mais aucune fonction ne permet de modifier un pixel, ni de déterminer sa couleur. Après m'être documenté sur le forum anglais, je vous propose donc ces 2 fonctions :
► Afficher le texte_GDIPlus_BitmapGetPixel
Code : Tout sélectionner
; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_BitmapGetPixel
; Description ...: Détermine la couleur d'un pixel.
; Syntax.........: _GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)
; Parameters ....: $hBitmap - Handle vers l'image dont on cherche la couleur d'un pixel
; $iX - Abscisse du pixel
; $iY - Ordonnée du pixel
; Return values .: Couleur du pixel en ARGB
; Author ........: Tolf
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ===============================================================================================================================
Func _GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)
Local $tArgb, $pArgb, $aRet
$tArgb = DllStructCreate("dword Argb")
$pArgb = DllStructGetPtr($tArgb)
$aRet = DllCall($ghGDIPDll, "int", "GdipBitmapGetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "ptr", $pArgb)
Return "0x" & Hex(DllStructGetData($tArgb, "Argb"))
EndFunc ;==>GDIPlus_BitmapGetPixel
► Afficher le texte_GDIPlus_BitmapSetPixel
Code : Tout sélectionner
; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_BitmapSetPixel
; Description ...: Définit la couleur d'un pixel.
; Syntax.........: _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iArgb)
; Parameters ....: $hBitmap - Handle vers l'image à modifier
; $iX - Abscisse du pixel
; $iY - Ordonnée du pixel
; $iArgb - Couleur du pixel en ARGB
; Return values .: None
; Author ........: Tolf
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ===============================================================================================================================
Func _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iArgb)
DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "dword", $iArgb)
EndFunc ;==>_GDIPlus_BitmapSetPixel
Attention : Lancez la fonction _GDIPlus_Startup() avant d'utiliser ces fonctions et _GDIPlus_Shutdown() quand vous ne les utilisez plus.
Exemple d'utilisation :
► Afficher le texteexemple
Code : Tout sélectionner
#Include <GDIPlus.au3>
_GDIPlus_Startup()
$h_image = _GDIPlus_ImageLoadFromFile("c:\test.jpg") ; <== mettez un chemin vers une image existante
$color = _GDIPlus_BitmapGetPixel($h_image, 10, 20) ; <== détermine la couleur du pixel 10;20
msgbox(0,"",$color)
_GDIPlus_BitmapSetPixel($h_image, 20, 10, 0xFFFF0000) ; <== met le pixel 20;10 en rouge
_GDIPlus_ImageSaveToFile($h_image, "c:\test2.jpg") ; <== enregistre l'image modifiée dans "C:\test2.jpg"
_GDIPlus_ImageDispose($h_image)
_GDIPlus_Shutdown()
Func _GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)
Local $tArgb, $pArgb, $aRet
$tArgb = DllStructCreate("dword Argb")
$pArgb = DllStructGetPtr($tArgb)
$aRet = DllCall($ghGDIPDll, "int", "GdipBitmapGetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "ptr", $pArgb)
Return "0x" & Hex(DllStructGetData($tArgb, "Argb"))
EndFunc ;==>GDIPlus_BitmapGetPixel
Func _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iArgb)
DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "dword", $iArgb)
EndFunc ;==>_GDIPlus_BitmapSetPixel
Attention : l'image doit avoir une taille minimale de 20x20 (on demande les pixels 10;20 et 20;10)
sinon il y aura une erreur fermant le programme.
Re: [Func] Modifier les pixels
Posté : mar. 14 oct. 2008 22:51
par Tlem
Tip Top.
Beau travail.
Re: [Func] Modifier les pixels
Posté : dim. 08 févr. 2009 07:46
par narbe48
merci pour tes fonctions une petite erreur dans l'exemple
_GDIPlus_ImageSaveToFile("c:\test2.jpg")manque $h_image
_GDIPlus_ImageSaveToFile($h_image,"c:\test2.jpg")
Cordialement
Re: [Func] Modifier les pixels
Posté : dim. 08 févr. 2009 12:12
par tolf