[Visual C++] Comment afficher un BMP ??

Comment afficher un BMP ?? [Visual C++] - C++ - Programmation

Marsh Posté le 16-05-2002 à 10:55:08    

Bonjour,  
 
Je cherche depuis quelques jours le moyen d'afficher sous Visual C++ 6.0 d'afficher un BMP en passant en parametre son path (ce n'est donc pas une ressource).
 
Je précise que je débute et que des explications me serais les bienvenues !!! :D
 
Merci d'avance

Reply

Marsh Posté le 16-05-2002 à 10:55:08   

Reply

Marsh Posté le 16-05-2002 à 11:04:33    

Avec la fonction LoadImage()
 
http://msdn.microsoft.com/library/ [...] e_9fhi.asp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2002 à 11:07:10    

Merci pour ta réponse mais j'arrive pas a l'utiliser !  :pt1cable:  
Aurais tu un exemple car moi je rame !!  :??:  
 
Merci d'avance !  :jap:

Reply

Marsh Posté le 16-05-2002 à 11:17:05    

Oui, bien sur  :D
Accroche toi aux branches  :lol:  

Code :
  1. #include <windows.h>
  2. HBITMAP g_hBitmap;
  3. BITMAP g_bmp;
  4. LRESULT CALLBACK WndProc(
  5. HWND hwnd,
  6. UINT msg,
  7. WPARAM wParam,
  8. LPARAM lParam
  9. )
  10. {
  11. HDC hdc, hMemDC;
  12. PAINTSTRUCT ps;
  13. switch(msg)
  14. {
  15. case WM_CREATE:
  16.  MessageBox(
  17.   hwnd,
  18.   "Une image C:\test.bmp doit exister.",
  19.   "BMP Test",
  20.   MB_OK );
  21.  g_hBitmap = LoadImage(
  22.      NULL,
  23.      "C:\\test.bmp",
  24.      IMAGE_BITMAP,
  25.      0, 0,
  26.      LR_LOADFROMFILE
  27.     );
  28.  GetObject(g_hBitmap, sizeof(g_bmp), &g_bmp);
  29.  return 0;
  30. case WM_PAINT:
  31.  hdc = BeginPaint(hwnd, &ps);
  32.  if(!hdc) return -1;
  33.  hMemDC = CreateCompatibleDC(hdc);
  34.  SelectObject(hMemDC, g_hBitmap);
  35.  BitBlt(
  36.   hdc,
  37.   0, 0,
  38.   g_bmp.bmWidth, g_bmp.bmHeight,
  39.   hMemDC,
  40.   0, 0,
  41.   SRCCOPY );
  42.  EndPaint(hwnd, &ps);
  43.  return 0;
  44. case WM_DESTROY:
  45.  PostQuitMessage(0);
  46.  return 0;
  47. } return DefWindowProc(hwnd, msg, wParam, lParam);
  48. }
  49. int WINAPI WinMain(
  50. HINSTANCE hInst,
  51. HINSTANCE hPrev,
  52. LPSTR lpszCmdLine,
  53. int nCmdShow
  54. )
  55. {
  56. static const char lpszClassName[] = "Bitmap Test";
  57. WNDCLASSEX wndclass;
  58. HWND hwnd;
  59. MSG msg;
  60. ZeroMemory(&wndclass, sizeof(wndclass));
  61. wndclass.cbSize = sizeof(wndclass);
  62. wndclass.lpfnWndProc = WndProc;
  63. wndclass.hInstance = hInst;
  64. wndclass.hIcon = (HICON)LoadIcon(NULL, IDI_APPLICATION);
  65. wndclass.hCursor = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
  66. wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  67. wndclass.lpszMenuName = NULL;
  68. wndclass.lpszClassName = lpszClassName;
  69. wndclass.hIconSm = (HICON)LoadIcon(NULL, IDI_APPLICATION);
  70. if(!RegisterClassEx(&wndclass))  return -1;
  71. hwnd = CreateWindow(
  72.    lpszClassName,
  73.    lpszClassName,
  74.    WS_OVERLAPPEDWINDOW,
  75.    CW_USEDEFAULT,
  76.    CW_USEDEFAULT,
  77.    CW_USEDEFAULT,
  78.    CW_USEDEFAULT,
  79.    NULL,
  80.    NULL,
  81.    hInst,
  82.    NULL
  83.   );
  84. if(!hwnd)  return -1;
  85. ShowWindow(hwnd, nCmdShow);
  86. UpdateWindow(hwnd);
  87. while(GetMessage(&msg, NULL, 0, 0))
  88. {
  89.  TranslateMessage(&msg);
  90.  DispatchMessage(&msg);
  91. }
  92. return msg.wParam;
  93. }


Ce code ouvre une fenêtre et affiche l'image C:\Test.bmp dans cette fenêtre.
 
A+

 

[jfdsdjhfuetppo]--Message édité par Harkonnen le 16-05-2002 à 11:18:43--[/jfdsdjhfuetppo]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2002 à 11:27:29    

Merci bien je v tester ca !!!  
THX :D

Reply

Marsh Posté le 16-05-2002 à 11:28:46    

Harkonnen a écrit a écrit :

Oui, bien sur  :D
Accroche toi aux branches  :lol:  
[code]
#include <windows.h>
 
HBITMAP g_hBitmap;
BITMAP g_bmp;
 
LRESULT CALLBACK WndProc(
 HWND hwnd,
 UINT msg,
 WPARAM wParam,
 LPARAM lParam
 )
{
 HDC hdc, hMemDC;
 PAINTSTRUCT ps;
 
 switch(msg)
 {
 case WM_CREATE:
  MessageBox(
   hwnd,
   "Une image C:\test.bmp doit exister.",
   "BMP Test",
   MB_OK );
 
  g_hBitmap = LoadImage(
      NULL,
      "C:\\test.bmp",
      IMAGE_BITMAP,
      0, 0,
      LR_LOADFROMFILE
     );
 
  GetObject(g_hBitmap, sizeof(g_bmp), &g_bmp);
 
  return 0;
 
 case WM_PAINT:
  hdc = BeginPaint(hwnd, &ps);
  if(!hdc) return -1;
 
  hMemDC = CreateCompatibleDC(hdc);
  SelectObject(hMemDC, g_hBitmap);
  BitBlt(
   hdc,
   0, 0,
   g_bmp.bmWidth, g_bmp.bmHeight,
   hMemDC,
   0, 0,
   SRCCOPY );
 
  EndPaint(hwnd, &ps);
  return 0;
....




 
C'est moche de mettre ca dans un WM_PAINT :D


---------------
Horizon pas Net, reste à la buvette!!
Reply

Marsh Posté le 16-05-2002 à 11:29:55    

Willyzekid a écrit a écrit :

 
 
C'est moche de mettre ca dans un WM_PAINT :D  




Dans quoi tu le mettrais ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2002 à 11:40:09    

Je te remerci bien mais je doit etre mové car j'y arrive pas  :??:  
 
Serai t-il possible d'avoir directement les .cpp et .h car moi je rame  :gun:  
 
Mon mail : bndelu@hotmail.com
 
Merci d'avance

 

[jfdsdjhfuetppo]--Message édité par fanta le 16-05-2002 à 11:40:28--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 16-05-2002 à 11:41:44    

Willyzekid , tu aurai une autre solution ????
 
Merci d'avance pour vos réponses :D

Reply

Marsh Posté le 16-05-2002 à 11:43:04    

En fait, WM_PAINT et surtout les fonctions (BeginPaint et EndPaint) qui lui sont associés sont bonnes pour la plupart des applications mais dès que tu fais du graphisme, c'est plus le top (!?). J'ai remarqué que tout cela était bien trop lent (bien que nécessaire). En général, l'interaction avec Windows ralentie une application...
 
Donc dès que besoin de perf (assez rarement :D), j'utilise:
HDC GetDC(HWND)
int ReleaseDC(HWND, HDC)
dans une fonction séparée...
 
J'ai vu ca dans les exemples de DirectX


---------------
Horizon pas Net, reste à la buvette!!
Reply

Marsh Posté le 16-05-2002 à 11:43:04   

Reply

Marsh Posté le 16-05-2002 à 11:43:43    

comment ça t'y arrives pas ?  :??:  
 
tu créé une image "test.bmp" sur C:\, tu créé un projet win32 application dans vc++, tu ajoutes un nouveau fichier source dans ce projet, tu fais un copier/coller de mon source dans ce fichier, puis tu fais F9 pour lancer la compilation...
 
et le seul .h c'est windows.h, fourni avec VC++


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2002 à 11:44:12    

fanta a écrit a écrit :

Je te remerci bien mais je doit etre mové car j'y arrive pas  :??:  
 
Serai t-il possible d'avoir directement les .cpp et .h car moi je rame  :gun:  
 
Mon mail : bndelu@hotmail.com
 
Merci d'avance  
 
 




 
heu...t'as déjà fait de la programmation windows ou tu débute?


---------------
Horizon pas Net, reste à la buvette!!
Reply

Marsh Posté le 16-05-2002 à 11:45:57    

Willyzekid a écrit a écrit :

 
 
heu...t'as déjà fait de la programmation windows ou tu débute?  




 
Si tu débute, y a ce site :
http://www.winprog.org/tutorial/
 
Ca a l'air d'avancer pas à pas et y a de l'affichage de bitmap à la fin. Mais pour ca t'as besoin de connaitre un peu les bases.


---------------
Horizon pas Net, reste à la buvette!!
Reply

Marsh Posté le 16-05-2002 à 11:47:03    

Willyzekid a écrit a écrit :

 
Donc dès que besoin de perf (assez rarement :D), j'utilise:
HDC GetDC(HWND)
int ReleaseDC(HWND, HDC)
dans une fonction séparée...
 
J'ai vu ca dans les exemples de DirectX  




 :jap:  
 
De toute façon, j'utilise jamais le GDI pour afficher des images, c'est bien trop lent, je passe par DirectDraw (Ou DirectGraphics)
 
Mais bon, vu son niveau, je vais pas le lancer dans DirectX...  :)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2002 à 13:08:27    

Encore merci pour vos réponse !
En fait le programme marche tout seul dans un nouveau projet.
Mais l'utilisation que je ve en faire c de l'integrer dans mon projet existant qui est une application MFC.
 
En fait je fé de la stéganographie et je voulais afficher l'image d'origine et le résultat avec les informations stokées dedans.
 
Le fait ke cela m'ouvre une autre Boite de dialoque ne me dérange pas.
 
Comment transformer le code pour en faire une fonction.
car la si je copie/colle le contenu du .c dans ma fonction il genere des erreurs de hInst et hWnd  :sweat:  
 
Merci en tout cas pour vos conseils !  :jap:

Reply

Marsh Posté le 16-05-2002 à 14:44:29    

Up plizz  
 :bounce:  :bounce:  :bounce:  :bounce:  
 
 :jap:  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed