[R] Récupèrer la valeur RGB de chaque pixel d'une image GIF

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Sachadee
Niveau 2
Niveau 2
Messages : 23
Enregistré le : dim. 29 sept. 2013 03:50
Status : Hors ligne

[R] Récupèrer la valeur RGB de chaque pixel d'une image GIF

#1

Message 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
Modifié en dernier par Sachadee le mer. 16 oct. 2013 03:55, modifié 1 fois.
alabases
Niveau 2
Niveau 2
Messages : 28
Enregistré le : dim. 03 mars 2013 11:38
Status : Hors ligne

Re: [..] Récupèrer la valeur RGB de chaque pixel d'une image

#2

Message 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
Modifié en dernier par alabases le mar. 15 oct. 2013 18:27, modifié 4 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupèrer la valeur RGB de chaque pixel d'une image

#3

Message par Tlem »

Sinon, ce sujet devrait correspondre exactement à ce que vous cherchez :
http://www.autoitscript.com/forum/topic ... -an-image/
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Sachadee
Niveau 2
Niveau 2
Messages : 23
Enregistré le : dim. 29 sept. 2013 03:50
Status : Hors ligne

Re: [..] Récupèrer la valeur RGB de chaque pixel d'une image

#4

Message 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 :D ) :

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 à +
Répondre