Page 1 sur 1
[R] Récupèrer la valeur RGB de chaque pixel d'une image GIF
Posté : mar. 15 oct. 2013 17:47
par Sachadee
Bonjour à tous,
Y a t'il un moyen de récuperer la valeur RGB (0-255) de chaque pixel d'un fichier GIF ou TIF (8bits)
et d'écrire ces valeurs dans un fichier texte.
Pour l'instant je le fais en Python, mais ça m'arrangerait de le faire en Autoit, pour ne pas faire d'appel externe.
Je précise que le fichier gif est petit (87x24)
D'avance merci pour votre aide
Re: [..] Récupèrer la valeur RGB de chaque pixel d'une image
Posté : mar. 15 oct. 2013 18:17
par alabases
Il faudrait peut etre voir du coté de l'UDF ImageSearch pour connaitre les classes et les methodes
Sinon:
Recuperer la taille de l'image (w-h)
Prévoir un tableau pour recueillir chaque valeur (au moins identique a la résolution 87+1x24+1)
Faire une boucle i pour la largeur et une sous boucle j pour la hauteur
Pour la formule je pense à $couleur[j] = PixelGetColor(i,j)
Par contre la valeur retourné est en Hexa donc prévoir une méthode pour la conversion RGB
Re: [..] Récupèrer la valeur RGB de chaque pixel d'une image
Posté : mar. 15 oct. 2013 18:18
par Tlem
Sinon, ce sujet devrait correspondre exactement à ce que vous cherchez :
http://www.autoitscript.com/forum/topic ... -an-image/
Re: [..] Récupèrer la valeur RGB de chaque pixel d'une image
Posté : mer. 16 oct. 2013 03:55
par Sachadee
Merci pour vos réponses,
Après quelques recherche j'ai trouver un code intèressant de "Prodigy" sur :
http://www.autoitscript.com/forum/topic ... -from-bmp/
que j'ai modifié de cette manière pour lire tous les pixels d'une image sans l'afficher et sauver la valeurs des pixels dans un fichier texte :
Code : Tout sélectionner
#include <GDIPlus.au3>
#include <GDIPlusConstants.au3>
_GetPixelFromBMP("Captcha1.gif")
Func _GetPixelFromBMP($sImage);git die farbe an $x,$y einer 24bpp-bitmap aus
Local $pbitmap, $Bmp
Local $tBD, $iWidth, $iHeight, $iStride
Local $pData, $color
_GDIPlus_Startup()
$pbitmap = _GDIPlus_ImageLoadFromFile($sImage) ;bild laden
If @error Then Return SetError(1, 2, 0)
$tBD = _GDIPlus_BitmapLockBits($pbitmap, 0, 0, _GDIPlus_ImageGetWidth($pBitmap), _GDIPlus_ImageGetHeight($pBitmap), $GDIP_ILMREAD, $GDIP_PXF24RGB)
If @error Then MsgBox(0, "", "Error locking region " & @error)
$iWidth = DllStructGetData($tBD, 1) ;breite der bitmap
$iHeight = DllStructGetData($tBD, 2) ;hoehe der bitmap
$iStride = DllStructGetData($tBD, 3) ;Erklärung : <a href='http://www.autoitscript.com/forum/index.php?showtopic=106673&view=findpost&p=753169' class='bbc_url' title=''>http://www.autoitscript.com/forum/index.php?showtopic=106673&view=findpost&p=753169</a>
$pData = DllStructGetData($tBD, 5) ;pointer auf die bitmapdaten
$Bmp = DllStructCreate("byte[" & $iStride * $iHeight & "]", $pData) ;struct gefüllt mit den Daten der Bitmap
For $y = 0 to $iHeight Step 1 ;ON BOUCLE SUR LA HAUTEUR
For $x = 0 To $iwidth Step 1 ;ON BOUCLE SUR LA LARGEUR
$position = $istride * ($y - 1) + 3 * ($x-1) ;Umrechnung der Position von x- und y- Koordinaten
$substruct = DllStructCreate("ubyte[3]", DllStructGetPtr($Bmp) + $position) ;eine 3-byte struct an die position vom pixel schreiben
$Color = DllStructgetData($substruct, 1) ;Daten aus der struct lesen
;FileWrite("testpixel.txt", $color & @CRLF) ;ON ECRIT LA VALEUR DU PIXEL DANS UN TXT
FileWrite("testpixel.txt", "Col : " & $x & " Ligne : " & $y & " " & $color & @CRLF & " ")
Next
Next
_GDIPlus_BitmapUnlockBits($pbitmap, $tBD)
;_WinAPI_DeleteObject($hBmp)
_GDIPlus_ImageDispose($pbitmap)
_GDIPlus_Shutdown()
return $color
EndFunc ;==>_GetImagePixels
Autre lien intèressant qui traite du sujet (à part celui donné par Tlem

) :
l'excellent GDIP.au3 -
http://www.autoitscript.com/forum/topic/106021-gdipau3/
et sur ce forum également un topic sur le sujet -
http://www.autoitscript.fr/forum/viewto ... 93&start=0
Voilà je mets le sujet comme clos, mais si quelqu'un à une idée pour améliorer le temps d'éxecution ou une autre méthode plus performante
qu'il n´hesite pas à poster.
Encore merci et à +