Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Non Résolu]Récupérer la couleur du pixel d'une image ?
Auteur Message
Répondre en citant
Message [Non Résolu]Récupérer la couleur du pixel d'une image ? 
Bonjour à tous ! Ca faisait un moment. Plus personne ne doit se rappeler de moi mais bon ...
J'avais arrêté la programmation depuis 3 ans mais il se trouve que cette année je suis à la fac et donc que j'ai des cours de programmation. Et ça m'a donné envie de refaire de l'Autoit. Smile
Sauf que j'ai oublié pas mal de truc depuis Sad et, me rappelant de la bonne ambiance et de l'entraide de ce forum, je reviens donc vers vous avec des questions et des projets bien entendu.

Donc récemment on a programmé en Python (parce qu'on étudie le python à la fac) deux fonctions qui permettent de cacher une image dans une autre et de récupérer une approximation d'une image cachée dans une autre.
Je voulais donc refaire l'algorithme en autoit avec une interface graphique et toussa sauf qu'il faut que je récupère la couleur de chaque pixels d'une image. Je précise que l'image n'est pas ouverte (tout se fait en arrière-plan en quelque sorte).

J'ai réussi à créer un bitmap avec une image et je sais qu'il existe une fonction _GDIPlus_BitmapGetPixel avec en arguments les coordonnées et l'image. Sauf que la couleur retournée devrait être codée sur 24 bits (6 caractères en hexa) mais chez moi ça me retourne une couleur sur 64 bits (16 caractères hexa). Si quelqu'un a une idée.
Du coup impossible de récupérer les composantes RGB puisque je ne sais pas à quelle position correspondent les caractères rouges, verts, bleus.

Sinon j'ai aussi testé avec _GDIPlus_BitmapLockBits. Cette fonction est censée créer une Dll avec les datas de la région sélectionnée. Mais après des tests et malgré ce que j'ai pu lire sur les forums anglais il semblerait que la donnée récupérée ne soit pas la couleur (pour une image rouge les composantes change à chaque pixel Sad)

Je vous mets un bout de code de test des deux fonctions si quelqu'un veut tester :

Code:
#include <GDIPlus.au3>
#include <Color.au3>

_GDIPlus_Startup() ;on lance GDI
 $image = _GDIPlus_BitmapCreateFromFile("c.jpg") ; on créé une image bitmap modifibale
 for $i=0 To _GDIPlus_ImageGetWidth($image)-1
    for $j=0 To _GDIPlus_ImageGetHeight($image)-1 ; on parcourt les pixels
      $a = _GDIPlus_BitmapLockBits($image,$i,$j,1,1,$GDIP_ILMREAD) ; on créé une Dll avec les données du pixel
      $b = _ColorGetRGB(Hex(DllStructGetData($a,"Scan0"))) ; on récupère soit-disant la couleur
      _GDIPlus_BitmapUnlockBits($image,$a) ; on débloque le bit
      MsgBox(0,"",Hex(_GDIPlus_BitmapGetPixel($image,$i,$j))) ;on affiche le code hexa de la couleur du pixel
      MsgBox(0,"",$b[0] & " " & $b[1] & " " & $b[2]) ; on affiche les composantes RGB
    Next
 Next

_GDIPlus_BitmapDispose($image)
_GDIPlus_Shutdown()


PS : Si quelqu'un sait comment pouvoir "lire" les data d'une Dll (ce qu'il y a dedans) ça pourrait potentiellement être utile.



[Edit]
Bien, il semblerait que le forum ne soit plus aussi actif qu'autrefois Sad
Tant pis, du coup j'abandonne le projet.
Je laisse le code au cas où quelqu'un se ré intéresserait à la question.
Passez une bonne journée et codez bien.



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Non Résolu]Récupérer la couleur du pixel d'une image ? 
Bonjour
désolé de ne pouvoir d aider il est vrai qu avec le travail je n ai plus trop le temps de coder.

Peu être regarder du coté de DllOpen
https://www.autoitscript.com/autoit3/docs/functions/DllOpen.htm

ou autre fonction
DllCallbackFree(), DllCallbackGetPtr(), DllCallbackRegister(), DllClose(), DllOpen(), DllStructCreate(), DllStructGetPtr()




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Non Résolu]Récupérer la couleur du pixel d'une image ? 
J'ai pas vu ton post.

J'ai fait une Commande externe PNG2HEX qui te decompose (dans un fichier texte) chaque pixel d'une image .
http://bbat.forumeiro.com/t375-png2hexexe-hex2pngexe-rar

En gros tu dois :

Creer la structure DLL :

Code:
$Scan0 = DllStructGetData($Reslt, "Scan0")
$v_BufferA = DllStructCreate("byte[" & $height * $width * 4 & "]", $Scan0)


Recuperer tous les pixels dans 1 string :

Code:
$AllPixels = DllStructGetData($v_BufferA, 1)


Et ensuite traiter le string pour recuperer les 8 caracteres Hexa de chaque pixel :

Code:
$sREResult1 = StringRegExpReplace(StringTrimLeft($AllPixels, 2), "(.{8})", "\1 ")



J'espère que ça peut t'aider....

Okay




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Message [Non Résolu]Récupérer la couleur du pixel d'une image ? 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch