Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
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 : La librairie FreeImage [ Archives / Au secours ] (Alexbad)
|
La librairie FreeImage
le 13/05/2006 15:31:48

Alexbad
|
Salut, J'ai commencé à programmer en C++ avec la librairie standard de Windows. Là, je réussis à ouvrir une jolie fenêtre grisonnante au centre de l'écran, et je veux afficher une image dedans. J'ai trouvé la librairie FreeImage, que je ne sais pas utiliser et je ne trouve absolument aucun tutorial ni aucun exemple de son utilisation à l'exception de la documentation officielle, avec laquelle j'ai tenté de faire ça, mais sans succès : #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <freeimage/FreeImage.h> #include "includes/resolution.c"
HWND hWnd; MSG msg; WNDCLASS wc; HDC DC; HGLRC RC;
LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: DC=GetDC (hwnd); break; case WM_CLOSE: PostQuitMessage (0); break; default: return DefWindowProc (hwnd,uMsg,wParam,lParam); break;
}
return 0; } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow) { DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE));
wc.style = CS_OWNDC; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, "favicon.ico"); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "OGL";
RegisterClass(&wc);
Position resolution, positionWindow, dimensionsWindow; resolution.x = GetSystemMetrics(SM_CXSCREEN); resolution.y = GetSystemMetrics(SM_CYSCREEN);
dimensionsWindow.x = 500; dimensionsWindow.y = 300;
positionWindow.x = resolution.x / 2 - dimensionsWindow.x / 2; positionWindow.y = resolution.y / 2 - dimensionsWindow.y / 2;
hWnd = CreateWindow("OGL", "École de La Page", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MINIMIZEBOX, positionWindow.x, positionWindow.y, dimensionsWindow.x, dimensionsWindow.y, NULL, NULL, hInstance, NULL); DC = GetDC(hWnd);
FILE* myfile = fopen("erreur.txt", "r+");
FIBITMAP *dib = FreeImage_Load(FIF_BMP, "images/load.bmp", BMP_DEFAULT);
// ... SetStretchBltMode(DC, COLORONCOLOR);
StretchDIBits(DC, 0, 0, 0, 0, 0, 0, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), FreeImage_GetBits(dib), FreeImage_GetInfo(dib), DIB_RGB_COLORS, SRCCOPY); // ... FreeImage_Unload(dib);
while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } fclose(myfile);
DLL_API void DLL_CALLCONV FreeImage_DeInitialise(); return 0; }
Voilà, merci d'avance pour votre aide 
|
|
|
|
Re : La librairie FreeImage
le 13/05/2006 16:31:47

ymca2003
|
traite le message WM_PAINT et dessine dedans l'image.
case WM_PAINT : PAINTSTRUCT ps = {0}; HDC hdc = BeginPaint(hWnd, &ps; ... EndPaint(hWnd, &ps); // plus sur des param, à checker sur MSDN
FIBITMAP *dib = FreeImage_Load(FIF_BMP, "images/load.bmp", BMP_DEFAULT);
=> à faire dans WM_CREATE
FreeImage_Unload(dib);
=> a faire dansWM_DESTROY
Ton erreur vient d'une mauvaise compréhension de la gestion d'une fenêtre Windows. Regarde le bouquin de petzold (j'ai pas le lien en tête mais il est souvent cité sur le forum) qui expliquera en détail.
|
|
|
Classé sous : hwnd, wc, freeimage, dib, dimensionswindow
|
CalendriCode
| | | L | M | M | J | V | S | D |
| 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 | | | | | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|