Page 1 sur 1

[R] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 07:10
par L4crymal
Bonjour tout le monde, je souhaiterai connaitre la meilleur technique pour ouvrir et modifier pixel par pixel une image avec autoit merci :)


( je pense pas que ce soit déjà demander )

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 19:10
par Tlem
Moi je dirais :

Code : Tout sélectionner

$Image = @WindowsDir & "\winnt256.bmp"

ShellExecute("mspaint.exe", $Image)
WinWait("Paint")

Opt("SendKeyDelay",100)
Send('!AZP')
Send('{RIGHT 4}{ENTER}')

MsgBox(64,"YEAAAAA","Ca c'est du zoom ...")
:lol: :lol: :lol: :lol: :lol:

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 20:17
par L4crymal
Et + serieusement ?

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 20:46
par Tlem
Heuuu, je n'en sais fichtre rien et pour l'instant, je n'ai pas vraiment le temps de regarder.

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 22:02
par L4crymal
Oups... Si Thierry ne sais pas... Alors qui peut savoir :P

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 22:47
par Tlem
Je trouve, que parfois on me surestime un peut trop ...
Je ne suis qu'un bricoleur du Dimanche. :P

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 22:52
par L4crymal
Et puis quoi encore? t'es juste le meilleur quoi...

Bref on s'écarte là :p

Quelqu'un sait comment sont codées les image que ce soit PNJ,BMP ou GIF

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 23:28
par Tlem
Pfffff ...
Portnawak. :roll:

Re: [..] Ouvrir et Modifier un image

Posté : ven. 29 mai 2009 23:39
par Iste
Ben... si t'es motivé... tu peux modifier un .bmp facilement, ya juste quelque octés au début pour le définir, puis tout les pixels sont exprimés un a un en commencant en bas a gauche
Par exemple, pour un petit bmp crée avec pain, j'ai

Code : Tout sélectionner

42 4D EA 00 00 00 00 00 00 00 36 00 00 00 28 00
00 00 13 00 00 00 03 00 00 00 01 00 18 00 00 00
00 00 B4 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
Puis chaque pixel sous la forme BB VV RR

Enfin... c'est un peu barbar et ya sans doute mieux a faire, mais ca marche....

Re: [..] Ouvrir et Modifier un image

Posté : sam. 30 mai 2009 15:20
par L4crymal
En faite j'aimerais juste savoir comment créer une image ( bmp ou autre ) seulement en disant un part un les pixel que je veut par exemple:

je créer une fonction qui ajoute un pixel à l'image ( qui ne fait que un pixel de hauteur ) en largeur et qui prend seulement en paramètre la couleur que je veux, c'est possible ?

Re: [..] Ouvrir et Modifier un image

Posté : sam. 30 mai 2009 22:55
par L4crymal
J'ai trouver ça pour lire une image BMP

Code : Tout sélectionner

;
#include <GDIPlus.au3>

Opt('MustDeclareVars', 1)
Local $hBitmap

_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile("test.bmp"); Enter path/name of image file here.
MsgBox(0, "", _GDIPlus_BitmapGetPixel($hBitmap, 0,0)); 0,0 is top left corner pixel of image.
For $i=1 to 20
FileWrite("ici.txt",_GDIPlus_BitmapGetPixel($hBitmap, $i, 0)&@CRLF)
Next
; Clean up resources
_GDIPlus_ImageDispose($hBitmap)

; Shut down GDI+ library
_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
;s
 
( le fichier fait dabbord une MSGBOX avec la couleur du premier pixel en haut a gauche, puis il lit les 20 premiers pixels et met leur couleur dans un fichier texte )

PLUS QUE A TROUVER POUR ÉDITER CES PIXELS !

Re: [..] Ouvrir et Modifier un image

Posté : dim. 31 mai 2009 04:59
par orax
C'est quasiment la même chose pour les éditer :
(avec $iARGB = alpha, rouge, vert, bleu)

Code : Tout sélectionner

Func _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iARGB = 0xFF000000)
    DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "dword", $iARGB)
EndFunc   ;==>_GDIPlus_BitmapSetPixel
http://msdn.microsoft.com/en-us/library/ms533971.aspx
http://msdn.microsoft.com/en-us/library ... S.85).aspx

Re: [..] Ouvrir et Modifier un image

Posté : dim. 31 mai 2009 10:13
par L4crymal
Eu comment? j'ai essayer comme ça mais aucun resultat :

Code : Tout sélectionner

#include <GDIPlus.au3>

Opt('MustDeclareVars', 1)
Local $hBitmap

_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile("Image.bmp"); Enter path/name of image file here.
For $i=1 to 20
_GDIPlus_BitmapSetPixel($hBitmap, $i,$i)
Next
; Clean up resources
_GDIPlus_ImageDispose($hBitmap)

; Shut down GDI+ library
_GDIPlus_Shutdown()

Func _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iARGB = 0xFF000000)
    DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "dword", $iARGB)
EndFunc   ;==>_GDIPlus_BitmapSetPixel

Re: [..] Ouvrir et Modifier un image

Posté : dim. 31 mai 2009 16:57
par Iste
heu, je vais essayer de tester ca dans l'aprem, mais peut etre qu'il faudrait un _GDIPlus_ImageSaveToFile($hBitmap,"Image2.bmp")

Edit ; Je confirme, ce code est fonctionel

Code : Tout sélectionner

#include <GDIPlus.au3>

Opt('MustDeclareVars', 1)
Local $hBitmap

_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile("img.bmp"); Enter path/name of image file here.
For $i=1 to 20
_GDIPlus_BitmapSetPixel($hBitmap, $i,$i,0x50500000)
Next
_GDIPlus_ImageSaveToFile($hBitmap,"Image2.bmp")
; Clean up resources
_GDIPlus_ImageDispose($hBitmap)

; Shut down GDI+ library
_GDIPlus_Shutdown()

Func _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, $iARGB = 0xFF000000)
    DllCall($ghGDIPDll, "int", "GdipBitmapSetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "dword", $iARGB)
EndFunc   ;==>_GDIPlus_BitmapSetPixel
PS : Merci d'avoir posé la question, je sent que ca va m'ammuser ce truc ^^

Re: [..] Ouvrir et Modifier un image

Posté : dim. 31 mai 2009 18:35
par L4crymal
TROP BIEN MERCI !!!

Mais eu c'est possible d'ajouter aussi des pixels? car si on édite des pixels qui n'existe pas encore, malheureusement ça ne fonctionne pas :P

Re: [..] Ouvrir et Modifier un image

Posté : ven. 05 juin 2009 17:38
par L4crymal
UP

Re: [..] Ouvrir et Modifier un image

Posté : sam. 06 juin 2009 19:29
par Iste
Alors, apres quelque recherche, il te faudra surement créer l'image de toute piece.
Créer un BMP n'est pas si dur, mais le modifier demande quand meme quelque calcule.
Si tu as le courage, lis ces deux page, et bonne chance ^^
http://www.commentcamarche.net/contents ... t-bmp.php3
http://www.rcweb.fr/image/bmp.html

Code : Tout sélectionner

#Include <String.au3>

$largeur = 86
$hauteur = 150
$Poid_Image = $largeur*$hauteur*3
$NB_pixel = $Poid_Image
$Poid_Fichier = $Poid_Image+54

$largeur = StringRegExp(Hex($largeur),"0*([0-9]*)",1)
$largeur = $largeur[0] & _StringRepeat ("0",8-StringLen ($largeur[0]))
$hauteur = StringRegExp(Hex($hauteur),"0*([0-9]*)",1)
$hauteur = $hauteur[0] & _StringRepeat ("0",8-StringLen ($hauteur[0]))
$Poid_Image = StringRegExp(Hex($Poid_Image),"0*([0-9]*)",1)
$Poid_Image = $Poid_Image[0] & _StringRepeat ("0",8-StringLen ($Poid_Image[0]))
$Poid_Fichier = StringRegExp(Hex($Poid_Fichier),"0*([0-9]*)",1)
$Poid_Fichier = $Poid_Fichier[0] & _StringRepeat ("0",8-StringLen ($Poid_Fichier[0]))

$image = "424D"
$image &= $Poid_Fichier
$image &= "00000000"
$image &= "36000000"
$image &= "28000000"
$image &= $hauteur
$image &= $largeur
$image &= "0100"
$image &= "1800"
$image &= "00000000"
$image &= $Poid_Image
$image &= "C40E0000"
$image &= "C40E0000"
$image &= "00000000"
$image &= "00000000"
For $i = 1 To $NB_pixel*3
    $image &= Hex(Random(1,255))
Next

;~ $image &= "FF0000000000FF00FFFFFFFF0000FF00FF0000FFFFFFFF00"

$file = FileOpen("Tsete.bmp",18)
FileWrite($file,_HexToString($image))

Re: [..] Ouvrir et Modifier un image

Posté : sam. 06 juin 2009 21:19
par L4crymal
Ouais mais j'ai pas compris un petit truc ( la taille en octet de l'image est immense comparée à la réel taille de l'image ), petite explication pliz ? :oops:

Re: [..] Ouvrir et Modifier un image

Posté : sam. 06 juin 2009 22:11
par Iste
Ben heu... non :/ c'est normal (je crois)
Il faut 3octé par pixel
Donc Largeur*Hauteur*3 = taille de l'image
Sinon tu peux encoder avec moins d'octé par pixel et perdre de la qualité (voir mes précédent liens)

C'est bien ca ? ou on parle pas du meme truc ?

Edit d'ailleur je me suis planté dans mon script,c'est $Poid_Image = $largeur*$hauteur*3
mais bon, ca marche quand meme (ou alors je me suis pas planté, et je comprend plus ce que j'ai fais ^^')

Edit 2 : Je confirme, ya plein d'erreur dans mes calcul de poids, mais j'ai fais ca a la va vite
Quand jouvre l'image sous paint (ca marche ^^) et que je la réengistre, il change des trucs, donc c'est bien que ca lui plaisait pas. Reste a compendre pk...

Re: [..] Ouvrir et Modifier un image

Posté : sam. 06 juin 2009 22:17
par L4crymal
AAAAAAAAAAAAAA D'ACCORD, Merci encore beaucoup pour ton aide c'est super sympa de pouvoir compter sur toi merci merci merci^^