Zeigen Sie ein Bitmap -Bild an, GetObject scheint einige Parameter in der Bitmap -Struktur falsch zu begrüßenC++

Programme in C++. Entwicklerforum
Guest
 Zeigen Sie ein Bitmap -Bild an, GetObject scheint einige Parameter in der Bitmap -Struktur falsch zu begrüßen

Post by Guest »

Meine Frage bezieht sich auf eine Aufgabe, die ich ursprünglich für einfach hielt. Ich finde jetzt, dass es viele
Details gibt, die nicht zuerst berücksichtigt wurden. Mein ursprüngliches Ziel war es, in einem Dialogfenster ein Bild einer Flagge zu zeichnen. Der Einfachheit halber habe ich angefangen, es im Hauptfenster anzuzeigen. Ich begann damit, ein Bild zu finden, es zu ändern und es mit meiner beabsichtigten Farbtiefe zu speichern. Die Bitmap / .bmp -Datei schien einfach zu sein, das war es, was ich verwenden wollte. In meinem Fall wurde vier Bit/sechzehn Farbe ausgewählt, um die Dateigröße zu reduzieren. Die tatsächliche Größe in der Datei ist 600 mal 300 hoch. Dies enthält eine Datei mit 90 -km -Pixeldaten plus der Header, die in meinem Fall 118 Bytes beträgt. Zuerst lade ich das Bild mit der folgenden Sequenz ... Ich habe die Fehlerprüfung für Klarheit entfernt: < /p>

Code: Select all

hFlag = LoadImage(GetModuleHandle(NULL), wcImageFile,
IMAGE_BITMAP, 600, 300, LR_DEFAULTCOLOR | LR_LOADFROMFILE);

GetObject(hFlag, sizeof(BITMAP), &bitmap);
< /code>
Der Inhalt von Bitmap ist nicht das, was ich nach dem Ausführen dieser kurzen Sequenz erwarte. Das Ergebnis für
BMTYPE, BMWIDTH, BMHEIGHT, BMWIDTHBYTES, BMPLANES sind alle, wie ich es erwarte. Das bmbitspixel ist jedoch
0x20 oder 32. Bmbits ist ein Nullzeiger. GetObject gibt
ein INT von 0x18 zurück, was die Größe der Bitmap -Struktur hat, die es füllt. Alles wie erwartet. Die Bits pro Pixel, von denen ich erwarte, dass sie 4 sind, kehrt mit 32 zurück. In einem Fall von 32 Bit/Pixel ist die Arraygröße der Pixeldaten achtmal kurz. Dies würde wahrscheinlich entdeckt und der Nullzeiger generiert.SelectObject(hdcMem, hFlag);
BitBlt(hdc, 0, 0, 600, 300, hdcMem, 0, 0, SRCCOPY);
< /code>
Das Flag wird dann angezeigt. Ich hoffe, jemand kann mir helfen, dies zu verstehen. Ich arbeite durch Petzold, aber es ist ein großes Buch.case WM_CREATE:
{
const wchar_t   *wImageFile;
wImageFile =    L"C:\\Users\\Tom\\Pictures\\Flag\\Flag.bmp";
DWORD           dwError = 0;

hFlag = (HBITMAP) LoadImage(GetModuleHandle(NULL), wImageFile, IMAGE_BITMAP, 600, 300, LR_DEFAULTCOLOR | LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if(hFlag == 0)
dwError = GetLastError();
int nWhatsit = GetObject(hFlag, sizeof(BITMAP), &bitmap);
return (INT_PTR)FALSE;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post