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>
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;
}
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]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;
Ich arbeite an einer Docker -Datei, um eine Flutter -Entwicklungsumgebung zu erstellen und Docker -Container zu lernen. Dabei bin ich auf einen Vorfall gestoßen, bei dem Docker nicht so funktioniert,...
Ich arbeite an einer Docker -Datei, um eine Flutter -Entwicklungsumgebung zu erstellen und Docker -Container zu lernen. Dabei bin ich auf einen Vorfall gestoßen, bei dem Docker nicht so funktioniert,...
Ich baue einen tief interaktiven fraktalen Generator, der irgendwann auf so etwas wie ein Arduino portiert und zu einem Eurorack -Modul aufgebaut wird, aber das ist außerdem, außer um zu erklären,...
Ich möchte eine Struktur als Parameter aus meiner C# -Anwendung an eine Funktion in einer C ++ - DLL übergeben. p>
In C ++ wird die Struktur wie folgt definiert: