<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Farbformat für BITMAT festlegen]]></title><description><![CDATA[<p>Ich habe inzwischen ein recht komplexes Projekt zusammengebaut und stehe nun vor einem kleinen Problem, welches ich gerne elegant lösen möchte.</p>
<p>Gegeben ist ein Puffer über den alles wichtige bekannt ist (Breite, Höhe, Farbformat: X8R8G8B8). Bisher habe ich folgende Funktionen verwendet, um diesen Puffer in einem gleich großen Windows Fenster zu zeichnen:</p>
<pre><code>HDC         hDeviceContext,
            hDCMemory;
PAINTSTRUCT PaintStruct;
BITMAP      Bitmap;
HBITMAP     hBitmap;
DWORD       dwPixel,
            dwPixelSize;

Bitmap.bmType = 0;
Bitmap.bmWidth = 640;
Bitmap.bmHeight = 480;
Bitmap.bmBitsPixel = 32;
Bitmap.bmWidthBytes = 2560; // 640 * 32 / 8
Bitmap.bmPlanes = 1;
Bitmap.bmBits = pBuffer;

hBitmap = CreateBitmapIndirect(&amp;Bitmap);
hDeviceContext = BeginPaint(hWindow, &amp;PaintStruct);
hDCMemory = CreateCompatibleDC(hDeviceContext);
SelectObject(hDCMemory, hBitmap);
BitBlt(hDeviceContext, 0, 0, 640, 480, hDCMemory, 0, 0, SRCCOPY);
DeleteDC(hDCMemory);
EndPaint(hWindow, &amp;PaintStruct);
</code></pre>
<p>Ich habe mir mal erlaubt in den hier gezeigten Code Konstanten einzusetzen, damit das ganze nicht zu unübersichtlich wird.</p>
<p>pBuffer wird der Funktion als Parameter übergeben und enthält Bilddaten im Format X8R8G8B8. Die Ausgabe ist auch soweit zufriedenstellend, abgesehen davon, das sämliche Blauanteile fehlen. Mit anderen Worten: das ausgegebene Bild ist quitsche-Gelb. Anscheinend interpretiert Windows den Puffer im einem anderen Format. Augenblicklich habe ich eine weitere Funktion davorgeschaltet, welchen den Puffer aufbereitet und die Farbanteile entsprechend neu anordnet. Dies kostet jedoch wieder Zeit und zusätzlich Speicherplatz.</p>
<p>Nach langer erklärung also meine Frage: Wie kann ich Windows mitteilen, in welchen Format die Bilddaten vorliegen? Ich möchte es UNBEDINGT vermeiden, die Farbanteile im Puffer nochmal neu anordnen zu müssen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118237/farbformat-für-bitmat-festlegen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 18:29:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118237.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Aug 2005 13:54:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Farbformat für BITMAT festlegen on Tue, 16 Aug 2005 13:54:32 GMT]]></title><description><![CDATA[<p>Ich habe inzwischen ein recht komplexes Projekt zusammengebaut und stehe nun vor einem kleinen Problem, welches ich gerne elegant lösen möchte.</p>
<p>Gegeben ist ein Puffer über den alles wichtige bekannt ist (Breite, Höhe, Farbformat: X8R8G8B8). Bisher habe ich folgende Funktionen verwendet, um diesen Puffer in einem gleich großen Windows Fenster zu zeichnen:</p>
<pre><code>HDC         hDeviceContext,
            hDCMemory;
PAINTSTRUCT PaintStruct;
BITMAP      Bitmap;
HBITMAP     hBitmap;
DWORD       dwPixel,
            dwPixelSize;

Bitmap.bmType = 0;
Bitmap.bmWidth = 640;
Bitmap.bmHeight = 480;
Bitmap.bmBitsPixel = 32;
Bitmap.bmWidthBytes = 2560; // 640 * 32 / 8
Bitmap.bmPlanes = 1;
Bitmap.bmBits = pBuffer;

hBitmap = CreateBitmapIndirect(&amp;Bitmap);
hDeviceContext = BeginPaint(hWindow, &amp;PaintStruct);
hDCMemory = CreateCompatibleDC(hDeviceContext);
SelectObject(hDCMemory, hBitmap);
BitBlt(hDeviceContext, 0, 0, 640, 480, hDCMemory, 0, 0, SRCCOPY);
DeleteDC(hDCMemory);
EndPaint(hWindow, &amp;PaintStruct);
</code></pre>
<p>Ich habe mir mal erlaubt in den hier gezeigten Code Konstanten einzusetzen, damit das ganze nicht zu unübersichtlich wird.</p>
<p>pBuffer wird der Funktion als Parameter übergeben und enthält Bilddaten im Format X8R8G8B8. Die Ausgabe ist auch soweit zufriedenstellend, abgesehen davon, das sämliche Blauanteile fehlen. Mit anderen Worten: das ausgegebene Bild ist quitsche-Gelb. Anscheinend interpretiert Windows den Puffer im einem anderen Format. Augenblicklich habe ich eine weitere Funktion davorgeschaltet, welchen den Puffer aufbereitet und die Farbanteile entsprechend neu anordnet. Dies kostet jedoch wieder Zeit und zusätzlich Speicherplatz.</p>
<p>Nach langer erklärung also meine Frage: Wie kann ich Windows mitteilen, in welchen Format die Bilddaten vorliegen? Ich möchte es UNBEDINGT vermeiden, die Farbanteile im Puffer nochmal neu anordnen zu müssen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853437</guid><dc:creator><![CDATA[BackusNaur]]></dc:creator><pubDate>Tue, 16 Aug 2005 13:54:32 GMT</pubDate></item></channel></rss>