Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : afficher une image jpeg avec la fonction StretchDIBits ? [ Archives / Autres asm ] (mitch19)

dimanche 5 mars 2006 à 21:54:55 | afficher une image jpeg avec la fonction StretchDIBits ?

mitch19

bonjour, j'essaye depuis quelques temps d'afficher une image jpeg avec
la commande  StretchDIBits, en vain ! mon programme plante lamentablement !
Si quelqu'un peut m'aider !
merci
mon code :
 
fichier db "photo1.jpg",0
bv4H BITMAPV4HEADER <>

.data ?
hPhoto dd ?
pPhoto dd ?
pJpeg dd ?
Largeur dd ?
Hauteur dd
.elseif uMsg == WM_COMMAND
     mov eax,wParam
     .if eax == IDM_OPEN
            
             invoke BitmapFromFile,offset fichier             ;ouvre fichier
             mov hPhoto, eax
     INVOKE GetObject, hPhoto, SIZEOF bv4H, ADDR bv4H ;  information image
;la déja eax=0 donc j'ai rien récupéré!
             mov pPhoto,eax                                   ;sauve sur pointer
             mov eax,bv4H.bV4V4Compression
             mov pJpeg,eax                                    ;récupère la compression
             mov eax,bv4H.bV4Width
             mov Largeur,eax                                  ;sauve largeur image
             mov eax,bmih.bV4Height
             mov Hauteur,eax                                  ;sauve hauteur image
       
             invoke InvalidateRect,hWnd,NULL,TRUE             ;repeindre la fenetre
  
       .endif

.elseif uMsg==WM_PAINT
      invoke BeginPaint,hWnd,addr ps
      mov hMemDC,eax
      invoke  SetStretchBltMode, hMemDC, COLORONCOLOR
      invoke  StretchDIBits, hMemDC, 0,0, cxClient, cyClient, 0,0,Largeur,Hauteur, \
         pJpeg, pPhoto, DIB_RGB_COLORS, SRCCOPY
....


dimanche 5 mars 2006 à 22:42:56 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

BruNews

Administrateur CodeS-SourceS
Je t'ai fait exemple en C ici, tu verras pour traduire en (pseudo) asm, pas le temps.
[ Lien ]
Une dialogbox repaint sa surface avec, alternativement par timer, 3 images (jpg, gif et bmp).

ciao...
[ Lien ]
BruNews, MVP VC++

lundi 6 mars 2006 à 20:34:58 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

mitch19

merci, je vais épelucher ton code !
et désolé pour le pseudo assembleur !

lundi 6 mars 2006 à 21:28:05 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

mitch19

Le code qui marche en masm32 merci BruNews

fichier db "photo1.jpg",0
bmih BITMAP <>

.data ?
hPhoto dd ?
hPhotoCopy dd ?
Largeur dd ?
Hauteur dd ?
.elseif uMsg == WM_COMMAND
     mov eax,wParam
     .if eax == IDM_OPEN
            
             invoke BitmapFromFile,offset fichier             ;ouvre fichier
             mov hPhoto, eax
             invoke CopyImage,hPhoto,IMAGE_BITMAP,0,0,/
             LR_COPYRETURNORG             
                mov hPhotoCopy,eax

            INVOKE GetObject, hPhotoCopy, SIZEOF bmih, ADDR bmih ;  information image
             mov eax,bmih.Width
             mov Largeur,eax                                  ;sauve largeur image
             mov eax,bmih.Height
             mov Hauteur,eax                                  ;sauve hauteur image
       
             invoke InvalidateRect,hWnd,NULL,TRUE             ;repeindre la fenetre
  
       .endif

.elseif uMsg==WM_PAINT
 invoke BeginPaint,hWnd,addr ps
 mov hdc,eax
 invoke CreateCompatibleDC,hdc
 mov hMemDC,eax
 invoke SelectObject,hMemDC,hBitmap
 mov hOld, eax
invoke GetClientRect,hWnd,addr rect
 invoke StretchBlt, hdc, 0, 0,cxClient, cyClient, hMemDC, 0, 0, cxDib,/
 cyDib, SRCCOPY


lundi 6 mars 2006 à 21:47:36 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

BruNews

Administrateur CodeS-SourceS
On peut parier au moins à 100 contre 1 que le compilo de VS aura produit un code nettement meilleur.
Regarde tous les accès mémoire que tu forces inutilement:
...
mov hdc,eax
invoke CreateCompatibleDC,hdc
mov hMemDC,eax
...
à chaque ligne tu vas relire en mémoire ce que tu as déjà en registre, dur dur...
Je te garantis qu'un bon compilo C moderne sait utiliser tous les registres pour ne jamais avoir à faire cela.

ciao...
[ Lien ]
BruNews, MVP VC++

mardi 7 mars 2006 à 11:22:54 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

patatalo

Membre Club Administrateur CodeS-SourceS
salut, sans parler de pari et pour ne pas avoir de compilo c moderne à la maison ( ça coûte combien ? ), j'aimerais voir le code obtenu. Je ne sais pas avec quoi sont programmés les logiciels d'aujourd'hui mais je n'ai jamais rien vu d'optimisé sortant d'un compilo C. Pas meme le ntkrnlmp: push ebx push esi push dword ptr [ebp+0Ch] push dword ptr [ebp-4] push dword ptr [ebp+8] call fn_0043D298 mov edi,eax <- c quoi ça, c'est de l'utilisation de tout les registres ? cmp edi,ebx jge loc_005434A9 @++

mardi 7 mars 2006 à 11:45:57 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

BruNews

Administrateur CodeS-SourceS
Bon exemple, son hMemDC placé dans EDI aurait été très bien...

Décompile l'exe du lien et regarde, j'ai vraiment mieux à faire.

ciao...
[ Lien ]
BruNews, MVP VC++

mardi 7 mars 2006 à 15:42:55 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

patatalo

Membre Club Administrateur CodeS-SourceS
bon exemple, ca aurait été optimisé si: push ebx push esi push dword ptr [ebp+0Ch] push dword ptr [ebp-4] push dword ptr [ebp+8] call fn_0043D298 mov edi,eax cmp eax,ebx jge loc_005434A9 @++

mardi 7 mars 2006 à 15:51:02 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

patatalo

Membre Club Administrateur CodeS-SourceS
puis faudrait voir a lire ce qui est noté plutot que de nous faire une pirouette: "et pour ne pas avoir de compilo c moderne à la maison" @++

mardi 7 mars 2006 à 20:32:49 | Re : afficher une image jpeg avec la fonction StretchDIBits ?

BruNews

Administrateur CodeS-SourceS
VC++ 2005 Express gratuit sur le site de MS.

ciao...
[ Lien ]
BruNews, MVP VC++


1 2

Cette discussion est classé dans : image, mov, dd, invoke, eax


Répondre à ce message

Sujets en rapport avec ce message

Aidez moi à traduire une petite fonction assembleur en C (API Windows) [ par skirby ] Bonjour à tous, J'essaye désespérément de traduire une fonction ASM en C. Le but de cette fonction est de pouvoir utiliser une ressource compilé dans Une mémoire "read" [ par msteve ] Bonsoir, Je suis débutant et j'ai recopié un programme test. Je parviens à l'assembler, puis à créer un .exe ; quend je lance l'exe j'obtiens la boîte declaration externe + news Kmdkit [ par patatalo ] salut, du nouveau pour les fondus de ring 0 sous NT: http://www.website.masmforum.com/tutorials/kmdtute/ ( kmd = kernel mode drivers ) avec masm32, exception 13 lors du scan memoire haute [ par patatalo ] salut, pourquoi ce code de detection de memoire en mode 32 bits sans paging me donne une exception 13 sur certaines cartes meres ( ASUS ) a l'adresse j'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32) [ par papiboff ] bj si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french) sv AT&T erreur de compilation etc... [ par maminovadu75 ] Bonjour, j'aimerais me mettre a l'assembleur mais j'ai quelque problème.voici mon code morceau de code pour trier un tableau de int : ( mélange de C/C Quels sont les parametres (nombre, taille...) [ par Renfield ] Bonjour,on peut appeler RunDll32 pour executer des fonctions contenues dans des dll...j'aimerais m'affranchir de cette étape, mais j'ai pour cela beso Assembleur et tableau + linux + bof [ par flocic ] Bonjour, J'ai un petit pb de comprehension, j'ai un programme qui deborde au bout 44 octet  à cause d'un depassement d ela taille du tableau. Mais ce optimisation [ par sajid_morad ] salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un po Cycles de mov [ par vecchio56 ] Je me demandais si les instructions suivantes étaient équivalentes en termes de performances, ou si certaines d'entres elles demandaient plus de cycle


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.