<?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[Bitmap aus Datei laden]]></title><description><![CDATA[<p>Hi,<br />
ob der Gefahr das ihr dachtet der Thread den ich gestern aufgemacht habe wäre abgeschlossen (hat nämlich niemand mehr geantwortet). Ich will ein Bitmap aus einer Datei laden (ohne LoadImage), dank Hilfe habe ich schon eine Funktion zusammengebastelt, die klappt aber nicht und ich kann den Fehler nicht finden.<br />
Danke schon im voraus.</p>
<blockquote>
<p>Beim Probieren bin ich nun aber leider an eine Stelle gekommen, an der ich nicht mehr weiter weiß. Ich poste mal den ganzen Code, er ist zwar ein bisschen flüchtig zusammengesetzt, dürfte aber nicht schwer zu verstehen sein.<br />
C/C++ Code:<br />
#include &lt;windows.h&gt;<br />
#include &lt;cstdio&gt;</p>
<p>#define WINDOW_NAME &quot;Test&quot;<br />
#define CLASS_NAME &quot;MyWindowClass&quot;</p>
<p>HBITMAP hBMP = NULL;</p>
<p>HRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);</p>
<p>HBITMAP LoadBitmap (char* szName);</p>
<p>int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPI,<br />
LPSTR lpCmdLine, int iCmdShow)<br />
{</p>
<p>WNDCLASSEX wc;</p>
<p>wc.cbClsExtra = NULL;<br />
wc.cbSize = sizeof( WNDCLASSEX );<br />
wc.cbWndExtra = NULL;<br />
wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );<br />
wc.hCursor = LoadCursor( 0, IDC_ARROW );<br />
wc.hIcon = LoadIcon( 0, IDI_WINLOGO );<br />
wc.hIconSm = NULL;<br />
wc.hInstance = hI;<br />
wc.lpfnWndProc = WndProc;<br />
wc.lpszClassName = CLASS_NAME;<br />
wc.lpszMenuName = NULL;<br />
wc.style = CS_VREDRAW|CS_HREDRAW;</p>
<p>RegisterClassEx( &amp;wc );</p>
<p>HWND hWnd = CreateWindowEx( NULL, CLASS_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW,<br />
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,<br />
NULL, NULL, hI, NULL );</p>
<p>ShowWindow( hWnd, iCmdShow );<br />
UpdateWindow( hWnd );</p>
<p>MSG msg;</p>
<p>hBMP = LoadBitmap( &quot;Bitmap.bmp&quot; );<br />
InvalidateRect( hWnd, NULL, true );</p>
<p>while (GetMessage( &amp;msg, NULL, 0, 0 ))<br />
{</p>
<p>TranslateMessage( &amp;msg );<br />
DispatchMessage( &amp;msg );</p>
<p>} // while</p>
<p>UnregisterClass( CLASS_NAME, hI );</p>
<p>DeleteObject( hBMP );</p>
<p>return msg.wParam;</p>
<p>} // WinMain</p>
<p>HRESULT CALLBACK WndProc (HWND hWnd, UINT message,<br />
WPARAM wParam, LPARAM lParam)<br />
{</p>
<p>PAINTSTRUCT ps;<br />
HDC hDC = NULL;<br />
HDC hBmpDC = NULL;</p>
<p>switch (message)<br />
{<br />
case WM_DESTROY:<br />
{<br />
PostQuitMessage( 0 );</p>
<p>return 0;<br />
} // case WM_DESTROY</p>
<p>case WM_PAINT:<br />
{</p>
<p>hDC = BeginPaint( hWnd, &amp;ps );</p>
<p>hBmpDC = CreateCompatibleDC( hDC );<br />
SelectObject( hBmpDC, hBMP );<br />
BitBlt( hDC, 0, 0, 200, 200, hBmpDC, 0, 0, SRCCOPY );<br />
DeleteDC( hBmpDC );</p>
<p>EndPaint( hWnd, &amp;ps );</p>
<p>return 0;</p>
<p>} // case WM_PAINT</p>
<p>} // switch</p>
<p>return DefWindowProc( hWnd, message, wParam, lParam );</p>
<p>} // WndProc</p>
<p>HBITMAP LoadBitmap (char* szName)<br />
{</p>
<p>/* Variablen zum Laden der Informationen <em>/<br />
FILE</em> pFile = NULL;<br />
BITMAPFILEHEADER bmfh;<br />
BITMAPINFOHEADER bmih;<br />
RGBQUAD* colors = NULL;<br />
int size = 0;<br />
BYTE* tempPixelData = NULL;<br />
HBITMAP hBmp = NULL;</p>
<p>/* Öffnen der Datei */<br />
pFile = fopen( szName, &quot;rb&quot; );</p>
<p>/* Laden des Dateikopfs */<br />
fread( &amp;bmfh, sizeof( BITMAPFILEHEADER ), 1, pFile );</p>
<p>/* Laden der Kopfinformationen */<br />
fread( &amp;bmih, sizeof( BITMAPINFOHEADER ), 1, pFile );</p>
<p>/* Laden der Farbpalette */<br />
if (bmih.biBitCount &lt; 24)<br />
{</p>
<p>size = 1 &lt;&lt; bmih.biBitCount;<br />
colors = new RGBQUAD[size];</p>
<p>if (colors == NULL)<br />
{<br />
fclose( pFile );<br />
return 0;<br />
} // if</p>
<p>fread( colors, sizeof( RGBQUAD ), size, pFile );</p>
<p>} // if</p>
<p>/* Laden der Pixeldaten */<br />
size = bmfh.bfSize - bmfh.bfOffBits;<br />
tempPixelData = new BYTE[size];<br />
fread( tempPixelData, sizeof( BYTE ), size, pFile );</p>
<p>/* Schließen des Handles */<br />
fclose( pFile );</p>
<p>/* Bitmap erstellen */<br />
hBmp = CreateBitmap( bmih.biWidth, bmih.biHeight,<br />
bmih.biPlanes, bmih.biBitCount, tempPixelData );</p>
<p>/* Speicherfreigabe */<br />
delete [] colors;<br />
delete [] tempPixelData;</p>
<p>return hBmp;</p>
<p>} // LoadBitmap</p>
<p>Ich habe dieses Programm schon einmal mit der LoadImage Funktion getestet und es hat funktioniert. Wer weiß was hier falsch ist schreibe das bitte.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/123299/bitmap-aus-datei-laden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 01:13:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123299.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Oct 2005 19:33:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bitmap aus Datei laden on Fri, 14 Oct 2005 19:33:21 GMT]]></title><description><![CDATA[<p>Hi,<br />
ob der Gefahr das ihr dachtet der Thread den ich gestern aufgemacht habe wäre abgeschlossen (hat nämlich niemand mehr geantwortet). Ich will ein Bitmap aus einer Datei laden (ohne LoadImage), dank Hilfe habe ich schon eine Funktion zusammengebastelt, die klappt aber nicht und ich kann den Fehler nicht finden.<br />
Danke schon im voraus.</p>
<blockquote>
<p>Beim Probieren bin ich nun aber leider an eine Stelle gekommen, an der ich nicht mehr weiter weiß. Ich poste mal den ganzen Code, er ist zwar ein bisschen flüchtig zusammengesetzt, dürfte aber nicht schwer zu verstehen sein.<br />
C/C++ Code:<br />
#include &lt;windows.h&gt;<br />
#include &lt;cstdio&gt;</p>
<p>#define WINDOW_NAME &quot;Test&quot;<br />
#define CLASS_NAME &quot;MyWindowClass&quot;</p>
<p>HBITMAP hBMP = NULL;</p>
<p>HRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);</p>
<p>HBITMAP LoadBitmap (char* szName);</p>
<p>int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPI,<br />
LPSTR lpCmdLine, int iCmdShow)<br />
{</p>
<p>WNDCLASSEX wc;</p>
<p>wc.cbClsExtra = NULL;<br />
wc.cbSize = sizeof( WNDCLASSEX );<br />
wc.cbWndExtra = NULL;<br />
wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );<br />
wc.hCursor = LoadCursor( 0, IDC_ARROW );<br />
wc.hIcon = LoadIcon( 0, IDI_WINLOGO );<br />
wc.hIconSm = NULL;<br />
wc.hInstance = hI;<br />
wc.lpfnWndProc = WndProc;<br />
wc.lpszClassName = CLASS_NAME;<br />
wc.lpszMenuName = NULL;<br />
wc.style = CS_VREDRAW|CS_HREDRAW;</p>
<p>RegisterClassEx( &amp;wc );</p>
<p>HWND hWnd = CreateWindowEx( NULL, CLASS_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW,<br />
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,<br />
NULL, NULL, hI, NULL );</p>
<p>ShowWindow( hWnd, iCmdShow );<br />
UpdateWindow( hWnd );</p>
<p>MSG msg;</p>
<p>hBMP = LoadBitmap( &quot;Bitmap.bmp&quot; );<br />
InvalidateRect( hWnd, NULL, true );</p>
<p>while (GetMessage( &amp;msg, NULL, 0, 0 ))<br />
{</p>
<p>TranslateMessage( &amp;msg );<br />
DispatchMessage( &amp;msg );</p>
<p>} // while</p>
<p>UnregisterClass( CLASS_NAME, hI );</p>
<p>DeleteObject( hBMP );</p>
<p>return msg.wParam;</p>
<p>} // WinMain</p>
<p>HRESULT CALLBACK WndProc (HWND hWnd, UINT message,<br />
WPARAM wParam, LPARAM lParam)<br />
{</p>
<p>PAINTSTRUCT ps;<br />
HDC hDC = NULL;<br />
HDC hBmpDC = NULL;</p>
<p>switch (message)<br />
{<br />
case WM_DESTROY:<br />
{<br />
PostQuitMessage( 0 );</p>
<p>return 0;<br />
} // case WM_DESTROY</p>
<p>case WM_PAINT:<br />
{</p>
<p>hDC = BeginPaint( hWnd, &amp;ps );</p>
<p>hBmpDC = CreateCompatibleDC( hDC );<br />
SelectObject( hBmpDC, hBMP );<br />
BitBlt( hDC, 0, 0, 200, 200, hBmpDC, 0, 0, SRCCOPY );<br />
DeleteDC( hBmpDC );</p>
<p>EndPaint( hWnd, &amp;ps );</p>
<p>return 0;</p>
<p>} // case WM_PAINT</p>
<p>} // switch</p>
<p>return DefWindowProc( hWnd, message, wParam, lParam );</p>
<p>} // WndProc</p>
<p>HBITMAP LoadBitmap (char* szName)<br />
{</p>
<p>/* Variablen zum Laden der Informationen <em>/<br />
FILE</em> pFile = NULL;<br />
BITMAPFILEHEADER bmfh;<br />
BITMAPINFOHEADER bmih;<br />
RGBQUAD* colors = NULL;<br />
int size = 0;<br />
BYTE* tempPixelData = NULL;<br />
HBITMAP hBmp = NULL;</p>
<p>/* Öffnen der Datei */<br />
pFile = fopen( szName, &quot;rb&quot; );</p>
<p>/* Laden des Dateikopfs */<br />
fread( &amp;bmfh, sizeof( BITMAPFILEHEADER ), 1, pFile );</p>
<p>/* Laden der Kopfinformationen */<br />
fread( &amp;bmih, sizeof( BITMAPINFOHEADER ), 1, pFile );</p>
<p>/* Laden der Farbpalette */<br />
if (bmih.biBitCount &lt; 24)<br />
{</p>
<p>size = 1 &lt;&lt; bmih.biBitCount;<br />
colors = new RGBQUAD[size];</p>
<p>if (colors == NULL)<br />
{<br />
fclose( pFile );<br />
return 0;<br />
} // if</p>
<p>fread( colors, sizeof( RGBQUAD ), size, pFile );</p>
<p>} // if</p>
<p>/* Laden der Pixeldaten */<br />
size = bmfh.bfSize - bmfh.bfOffBits;<br />
tempPixelData = new BYTE[size];<br />
fread( tempPixelData, sizeof( BYTE ), size, pFile );</p>
<p>/* Schließen des Handles */<br />
fclose( pFile );</p>
<p>/* Bitmap erstellen */<br />
hBmp = CreateBitmap( bmih.biWidth, bmih.biHeight,<br />
bmih.biPlanes, bmih.biBitCount, tempPixelData );</p>
<p>/* Speicherfreigabe */<br />
delete [] colors;<br />
delete [] tempPixelData;</p>
<p>return hBmp;</p>
<p>} // LoadBitmap</p>
<p>Ich habe dieses Programm schon einmal mit der LoadImage Funktion getestet und es hat funktioniert. Wer weiß was hier falsch ist schreibe das bitte.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/892607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892607</guid><dc:creator><![CDATA[Gast_]]></dc:creator><pubDate>Fri, 14 Oct 2005 19:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap aus Datei laden on Fri, 14 Oct 2005 21:21:54 GMT]]></title><description><![CDATA[<p>Trotzdem rechtfertigt das keinen neuen Thread -&gt; <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-123118.html" rel="nofollow">hier</a> geht es weiter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892664</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Fri, 14 Oct 2005 21:21:54 GMT</pubDate></item></channel></rss>