begin process at 2008 09 05 13:39:15
1 237 231 membres
186 nouveaux aujourd'hui
14 313 membres club

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

Participer à cet échange

Livres en rapport

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

Snippets en rapport

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS