IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

afficher une image ide:masm32,lib:win32


Sujet :

Windows

  1. #1
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut afficher une image ide:masm32,lib:win32
    bonjour,

    Depuis quelques jour je penne, je me decide donc a poster ce message.

    Je desir afficher une image dans une fenetre. Cette image est designé par l'utilisateur par l'intermediaire d'une boite de dialogue.
    Je ne sais vraiment pas comment je dois m'y prendre pour afficher cette image.
    (j'aurais aimé faire un truc dans le genre <input type="file"> )

    Si qlq'un pouvais m'aider ca serai vraiment super.

    En tout cas, merci pour votre attention ...

  2. #2
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    tu peux utiliser cette librairie :
    http://www.codeproject.com/bitmap/th...of_plain_c.asp

  3. #3
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    Je te remerci, (lien interessant )
    mais...

    J'ais trouver un super tutoriel qui me permet de faire ce que je veu.
    Je me base sur le tutoriel 11 de morgatte .. heuu icZelion pour ouvir un fichier (ici une image) et ensuiste je l'afficha en me basant sur l'exemple fourni avec masm32 (c:/MASM32/exemples/EXEMPLE2/DIBSHOW)

    Bon j'avoue que je n'y suis pas encore arrivé par ce que l'aire de rien, ca en fait du code...

    vous pouvez trouver les tuto a l'adresse :http://perso.wanadoo.fr/luce.yves/tutor.html

    un site bien (mis apart Developpez.com qui decal tout)
    http://perso.wanadoo.fr/luce.yves/ . Vous pourez aussi y telecharger masm32

    ------
    La vie n'est pas compliqué! c'est nous qui la compliquons

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    2 possibilités:
    - gérer WM_PAINT dans ta fenêtre pour dessiner ton image (bitblt)
    - créer un controle static SS_BITMAP dans ta fenêtre à qui tu vas demander d'afficher l'image via STM_SETIMAGE.
    http://chgi.developpez.com/windows/static/

  5. #5
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    J'ai encore 2 question portant sur les images.

    La premiere (moins important ... mais quand meme)

    Je voudrais ouvrire une image avec une dialogue box (ce que j'arrive a faire) mais je voudrais que l'orsque je simple-clic sur une image elle soit affiche a droit de la dialoguebox (j'ais vue ca sur un logiciel de graphisme : photoFilter )
    j'ais cherché dans la reference api de MSDN mais j'ai pas trouvé la fonction que j'utilise??? (GetOpenFileName) et est dans la librayri comdlg32.lib ...

    Ma dieuxieme question crucial pour moi
    Je voudrai realiser une interface graphique dynamique et pour ca, je voudrai savoir qu'elle methode utiliser?
    Ps: Si la methode statique est preferable (definition des resource si j'ais bien compri) savez vous comment suprimer une image collé dans DC
    si non le fait d'afficher une image par dessus est ce mal ??

    ------
    La vie n'est pas compliqué, c'est nous qui l'a compliquons!

  6. #6
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    Aurelien.Regat-Barrel je te remerci pour le lien sur le tuto en C . Ce n'est pas ce que je cherchais mais c'est ce que je trouverai (pour l'instant masm).

    Je voulais aussi savoir qu'elle fonction (en C#) vous utilisez pour ouvrir une boit de dialogue qui ouvrir un fichier?



    Décidement ce CR_Gio voudrai savoir bcp de choses...

    ----
    pourquoi les pointeur de char c'est mal?
    je croyai que le plus gros probleme d'un ordi c'était entre Ykea et DELL?... ouff j'ais été un peu loin là. Je disais donc que je pensais que le plus gros probleme pour un ordi se situai entre la chaise et l'écran.
    heing!! pourquoi?(serieu)

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    asm, C, C#, ... tu développes en quoi ?
    C# c'est .Net, y'a un forum spécialisé. Faut pas poser 36 questions dans le même topic.

  8. #8
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    je developpe en asm(si on peu appeler ca de l'asm ... Mhuu wouai allé) sous MASM32 en ce moment ... en tout cas j'éssai.

    bon, je pense que ce topic est résolut.

    ------
    Aide toi et dieu t'aideras

  9. #9
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    je vous ajoute le code que j'ai fais (ca peu toujour aider) : il permet d'afficher une image externe par l'intermediaire d'une boite de dialogue.
    Ce code est compilé avec masm32. et s'execute sur win XP

    - Il n'y a pas de redimensionnement d'image (j'y travail)

    Attention!!!! a partir d'ici mettez vos lunette 8) ... (je me mar tout seul halala)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    .386
    .model flat,stdcall
    option casemap&#58;none
    
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\gdi32.inc ; pour SetDibToDevice&#40;&#41;
    include \masm32\include\comdlg32.inc ; pour GetOpenFileName&#40;&#41;
    
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\comdlg32.lib
    
    
    .data
    ClassName db "WinClass",0
    AppName   db "Image",0
    MenuName  db "WinMenu",0
    
    ; filtre de fichier de la boite de dialogue &#40;OpenFileName&#41;
    strFilter db "Image &#40;*.bmp&#41;",0,"*.bmp",0
                 db "Image &#40;*.jpg&#41;",0,"*.jpg",0
                 db "Image &#40;*.gif&#41;",0,"*.gif",0
                 db "Image &#40;*.png&#41;",0,"*.png",0, 0    ;le dernier "0" indique la fin du filtre
    DefExtn	  db	"jpg",0  ;fichier par default
    
    .data?
    hInstance HINSTANCE ?   ; instance programme
    wc        WNDCLASSEX<>  ; classe fenetre
    msg       MSG<>         ; message feneter
    hwnd      HWND ?        ; handle fenetre
    
    ofn   OPENFILENAME <>   ;sctructure file
    szFileName	db	MAX_PATH DUP &#40;?&#41;
    szTitleName	db	MAX_PATH DUP &#40;?&#41;
    
    ps    PAINTSTRUCT<>
    hdc   HDC ?
    
    
    pbmfh       DD    ?  ; Pointeur de structure BITMAPFILEHEADER
    pbmi        DD    ?   ; Pointeur de structure BITMAPINFO
    pBits       DD    ? 
    
    cxDib       DD    ? 
    cyDib       DD    ? 
    cxBitMap    DD    ?  ; largeur
    cyBitMap    DD    ?  ; hauteur
    
    hMemory     DD    ?  ; Pointeur du bloc memoire alloué
    hFile       DD    ?  ; pointeur de fichier
    
    ptrMSB       DD  ?  ; taille du fichier mot poid fort
    ptrLSB        DD  ?  ; taille du fichier mot poid faible
    
    ByteRead     DD  ?  ;nombre d'octets lu &#40;donnee&#41;
    
    .const
    IDM_OPEN    equ 1
    MAX_PATH    equ 260
    
    .code
    start&#58;
    ;      /###################################\
    ;    &#40;###     CREATION D'UNE FENETRE      ###&#41;
    ;      \###################################/
    
    	invoke GetModuleHandle, NULL
    	mov    hInstance,eax
    
    	mov   wc.cbSize,SIZEOF WNDCLASSEX
    	mov   wc.style, CS_HREDRAW or CS_VREDRAW
    	mov   wc.lpfnWndProc, OFFSET WndProc
    	mov   wc.cbClsExtra,NULL
    	mov   wc.cbWndExtra,NULL
    	push  hInstance
    	pop   wc.hInstance
    	mov   wc.hbrBackground,COLOR_BTNFACE+1
    	mov   wc.lpszMenuName,OFFSET MenuName
    	mov   wc.lpszClassName,OFFSET ClassName
    	invoke LoadIcon,hInstance,1
    	mov   wc.hIcon,eax
            invoke LoadIcon,hInstance,2
    	mov   wc.hIconSm,eax
    	invoke LoadCursor,NULL,IDC_ARROW
    	mov   wc.hCursor,eax
    	invoke RegisterClassEx, OFFSET wc
    	INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,\
     	                                               OFFSET ClassName,\
    	                                                  OFFSET AppName,\
    	                                  WS_OVERLAPPEDWINDOW,\
                                                                                     10,10,\
    	                                                 500,300,NULL,NULL,\
    	                                                         hInstance,NULL
    	mov   hwnd,eax
    
    	INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
    	INVOKE UpdateWindow, hwnd
    
    	.WHILE TRUE
                    INVOKE GetMessage,OFFSET msg,NULL,0,0
                    .BREAK .IF &#40;!eax&#41;
                    INVOKE TranslateMessage, OFFSET msg
                    INVOKE DispatchMessage, OFFSET msg
    	.ENDW
    
    mov     eax,msg.wParam
    invoke ExitProcess,eax
    
    
    
    WndProc proc hWnd&#58;HWND, uMsg&#58;UINT, wParam&#58;WPARAM, lParam&#58;LPARAM
    LOCAL success&#58;DWORD
    
    	.IF uMsg==WM_DESTROY
              .IF hMemory
    	      invoke   GlobalUnlock, pbmfh      ; deverouillage bloc memoire
    	      invoke   GlobalFree, hMemory    ; delocation memoire
    	  .ENDIF
              invoke PostQuitMessage,NULL
    
    
    ;      /###################################\
    ;    &#40;###         AFFICHAGE DE L'IMAGE         ###&#41;
    ;      \###################################/
          .ELSEIF uMsg==WM_PAINT
    	    invoke BeginPaint,hWnd, ADDR ps
    	    mov    hdc,eax
              .IF pbmfh
    ; affichage de l'image dans la zone client
                invoke SetDIBitsToDevice,hdc,10,10,cxDib,cyDib,0,0,0,cyDib,pBits,pbmi,DIB_RGB_COLORS
              .ENDIF
              invoke EndPaint, hWnd, ADDR ps
              ret
    ;      /############################\
    ;    &#40;###   COPIE L'IMAGE EN RAM  ###&#41;
    ;      \############################/
    	.ELSEIF uMsg==WM_COMMAND
              mov eax,wParam
              .IF ax==IDM_OPEN
    ; initialisation de la structure de fichier
    ; --------------------------------------------
              mov	ofn.lStructSize, sizeof OPENFILENAME
                  push    hWnd
                  pop     ofn.hWndOwner
              mov	ofn.hInstance, 0
              mov	ofn.lpstrFilter, offset strFilter
              mov	ofn.lpstrCustomFilter, 0
              mov	ofn.nMaxCustFilter, 0
              mov	ofn.nFilterIndex, 0
                  push    OFFSET szFileName
                  pop     ofn.lpstrFile
              mov	ofn.nMaxFile, MAX_PATH
                 push    OFFSET szTitleName	
                  pop     ofn.lpstrFileTitle
              mov	ofn.nMaxFileTitle, MAX_PATH
              mov	ofn.lpstrInitialDir, 0
              mov	ofn.lpstrTitle, 0		
              mov	ofn.Flags, 0
              mov	ofn.nFileOffset, 0
              mov	ofn.nFileExtension, 0
              mov	ofn.lpstrDefExt,offset DefExtn	; extension par default &#58; JPG
              mov	ofn.lCustData, 0
              mov	ofn.lpfnHook, 0
              mov	ofn.lpTemplateName, 0
    
    
    &#58;ouverture du fichier &#40;boite de dialogue&#41;
                  invoke	GetOpenFileName, ADDR ofn
                  .IF  !eax
                    ret ; ouverture annuler
                    invoke MessageBox,NULL,NULL,NULL,NULL
                  .ENDIF
                  .IF pbmfh			; If there's an existing DIB, free the memory 
                      invoke   GlobalUnlock, pbmfh
                      invoke   GlobalFree, hMemory
                  .ENDIF
    
    ;chargement de l'image en memoire &#40;RAM&#41;
    ;----------------------------------------------------
                  invoke CreateFile,ofn.lpstrFile,\
                                     GENERIC_READ,\
                                  FILE_SHARE_READ,\
                                                0,\
                                    OPEN_EXISTING,\
                        FILE_FLAG_SEQUENTIAL_SCAN,\
                                                0
                  mov hFile,eax ;prend l'handle de l'entete du fichier
    ; fichier introuvable
                  .IF eax==INVALID_HANDLE_VALUE
                      jmp @F
                      badopen db"n'arrive pas à charger le fichier!",0
                      @@&#58;
                      invoke MessageBox,NULL,OFFSET badopen,NULL,NULL
                      ret ; erreur
                  .ENDIF
    
    ; recuperation de la taille du fichier &#40;taille donnée&#41;
                  invoke GetFileSize,hFile,OFFSET ptrMSB ;taille des info du fichier
                  mov ptrLSB,eax
                  .if ptrMSB
                    invoke CloseHandle, hFile
                    jmp @F
                    badsize db"Le fichier est trop volumineu!",0
                    @@&#58;
                    invoke MessageBox,NULL,OFFSET badsize,NULL,NULL
                    ret
                  .endif
    ; alloue de la memoire ram
                  invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,ptrLSB
                  mov  hMemory,eax ;handle du block memoire
                  invoke GlobalLock,hMemory ; verouillage de bloc memoire
                  mov  pbmfh,eax  ; got pointer to BITMAPFILEHEADER
                  mov  ebx,eax
                  .IF pbmfh==NULL      ; If it fails
                      jmp @F
                      badupload db"n'arrive pas à charger!",0
                      @@&#58;
                      invoke MessageBox,NULL,OFFSET badupload,NULL,NULL
                      invoke CloseHandle, hFile
                      ret
                  .ENDIF
    ;copie de l'image dans notre bloc memoire
                  invoke ReadFile,hFile,pbmfh,ptrLSB,OFFSET ByteRead,0
                  mov  success,eax
                  invoke CloseHandle,hFile ; on en a fini avec le ficher &#40;on l'a copié&#41;
                  mov  eax, ByteRead
                  mov  cx, BITMAPFILEHEADER.bfType&#91;ebx&#93;	; Get file type from header; must be BM
                  mov  edx,BITMAPFILEHEADER.bfSize&#91;ebx&#93;	; Size &#40;in bytes&#41; of bitmap
    
                  .IF !success || eax != ByteRead ||  cx != "MB" || edx != ByteRead
                      invoke   GlobalUnlock,pbmfh
                      invoke   GlobalFree, hMemory    
                      ret
                  .ENDIF
    ;preparation de la zone cliente
                  invoke InvalidateRect, hWnd, NULL, TRUE	;Invalidate client area for later update
                  mov  eax, sizeof BITMAPFILEHEADER    ; BITMAPINFO immediately follows
                  add  eax,pbmfh
                  mov  pbmi,eax
                  mov  esi,eax ;save in reg as well
                  mov  eax,BITMAPFILEHEADER.bfOffBits&#91;ebx&#93;; offset from BMFH struct to pix bits
                  add  eax,ebx
                  mov  pBits,eax		; This is a pointer to the actual DIB pixel bits 
    
                  .IF  BITMAPINFO.bmiHeader.biSize&#91;esi&#93;== sizeof BITMAPCOREHEADER
                      ; width & height are WORDs
                      xor  eax,eax					; Make sure we clear high word
                      mov  ax, BITMAPCOREHEADER.bcWidth&#91;esi&#93;	; Width of bitmap
                      mov  cxDib, eax
                      mov  ax, BITMAPCOREHEADER.bcHeight&#91;esi&#93;	; Height
                      mov  cyDib, eax
    
                  .ELSE    ; width & heght are DWORDs
                      xor  eax,eax    ; Make sure we clear high word
                      mov  eax, BITMAPINFO.bmiHeader.biWidth&#91;esi&#93;
                      mov  cxDib, eax
                      mov  eax, BITMAPINFO.bmiHeader.biHeight&#91;esi&#93;
                      .IF eax < 1
                          neg  eax    ; Get abs value
                      .ENDIF	
                      mov  cyDib, eax
                  .ENDIF
              .ENDIF
              ret
    
    	.ELSE
              invoke DefWindowProc,hWnd,uMsg,wParam,lParam
              ret
    	.ENDIF
          xor eax,eax
    	ret
    WndProc endp
    end start
    PS: j'ai mentionné mes sources plus haut

    J'aimerais avoir vos avis sur cette source, mes fauts , l'optimisation etc... merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Win32][D7] TMemo : afficher une image en arrière plan
    Par Benjamin GAGNEUX dans le forum Delphi
    Réponses: 34
    Dernier message: 12/02/2007, 17h47
  2. [Win32, C++] Afficher une image de fond
    Par Phaydrinix dans le forum Windows
    Réponses: 1
    Dernier message: 21/06/2006, 16h17
  3. [MASM32] Afficher une image
    Par CR_Gio dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 25/09/2005, 23h43
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo