tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
497
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kickerxy123 kickerxy123 ist offline Mitglied Gold
    Registriert seit
    Mar 2008
    Beiträge
    147
    Hallo,

    zunächst zu meinen Voraussetzungen:
    - Dev-Cpp 5.0.0.8 (ja, es gibt eine neue Version aus dem Nov 2011 )
    - WinXp 32
    - Winapi soll verwendet werden


    Nun zu meinem Problem:

    Ich möchte aus einem Byte Array heraus eine gültige HBITMAP erstellen.

    Mein Ansatz:
    Code cpp:
    1
    2
    3
    4
    5
    
    //buf  ist ein BYTE array
    //bi ist vom Typ BITMAPINFO
    HDC hMem = CreateCompatibleDC(GetDC(NULL));
    HBITMAP hBitmap = CreateCompatibleBitmap(hMem, bi.bmiHeader.biWidth, bi.bmiHeader.biHeight);
    SetDIBits(hMem, hImage, 0, bi.bmiHeader.biHeight, buf, &bi, DIB_RGB_COLORS);

    Leider ist die erstellte HBITMAP komplett schwarz. O.g. Aufrufe liefern alle ERROR_SUCCESS.
    An den übergebenen Infos (Byte Array, BI) kann es nicht liegen, da folgender Aufruf problemlos geht:
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    HANDLE hFile=CreateFile("abc.bmp", GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0);
    WriteFile(hFile, &bfh, sizeof(bfh), &written, NULL);
    WriteFile(hFile, &bi.bmiHeader, sizeof(BITMAPINFOHEADER), &written, NULL);
    WriteFile(hFile, buf, bi.bmiHeader.biSizeImage, &written, NULL);
    CloseHandle(hFile);
    HBITMAP hImage = (HBITMAP)LoadImage(NULL,"abc.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);


    Die Anzeige realisiere ich so:
    Code cpp:
    1
    
    SendMessage(bmpHwnd, STM_SETIMAGE, IMAGE_BITMAP, hImage);

    Wie gesagt, erscheint im ersten Fall nur ein schwarzer Bildschirm; im zweiten Fall läuft alles korrekt ab. Allerdings ist es natürlich unschön und unperformant alles auf einer Festplatte zwischenzuspeichern.
    Kann mir wer helfen?



    Vielen Dank,
    kickerxy123
     
    hilfreiche Antwort? Es gibt einen Danke-Button ;)
    Rettet das Internet!

  2. #2
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Du hast vergessen dem DC die Bitmap zuzuordnen.

    Code :
    1
    2
    3
    
    HDC hMem = CreateCompatibleDC(GetDC(NULL));
    HBITMAP hBitmap = CreateCompatibleBitmap(hMem, bi.bmiHeader.biWidth, bi.bmiHeader.biHeight);
    HBITMAP hbmOld = (HBITMAP)SelectObject(hMem,hBitmap);
    Geändert von Thomasio (08.12.11 um 02:48 Uhr)
     

Ähnliche Themen

  1. [C++/WinApi] Bitmap Ladebalken
    Von posi90 im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 24.12.10, 11:18
  2. Antworten: 3
    Letzter Beitrag: 20.10.10, 22:41
  3. buffer aufteilen
    Von tifa im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 02.08.05, 22:32
  4. Antworten: 18
    Letzter Beitrag: 24.04.05, 13:43
  5. [oracle] create table oder create view
    Von m3000 im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 07.01.05, 13:35

Stichworte