<?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[8bit und 16bit Screenshots]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem, ich erstelle Screenshots uns Speichere diese als BMP ab. Bei 32bit ist alles OK, bei 16bit ist ein blaustich drin, und bei 8bit ist es nur noch weiß. Wer kann mir da mal fix <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> weiterhelfen?</p>
<pre><code class="language-cpp">bool CPSDlg::Screenshot(CWnd* pWnd)
{
	CWindowDC CWndDC(pWnd);
	CDC CMemDC;
	CBitmap CShotBmp;

	CPalette* test;
	test = CWndDC.GetCurrentPalette();

	CMemDC.CreateCompatibleDC(&amp;CWndDC);

	CRect CClientRect;
	CClientRect.left = CClientRect.top = 0;
	CClientRect.right = ::GetSystemMetrics(SM_CXSCREEN);
	CClientRect.bottom = ::GetSystemMetrics(SM_CYSCREEN);

	CShotBmp.CreateCompatibleBitmap(&amp;CWndDC, CClientRect.Width(),CClientRect.Height());

	CMemDC.SelectObject(&amp;CShotBmp);
    CMemDC.BitBlt(0,0,CClientRect.Width(),CClientRect.Height(),&amp;CWndDC,0,0,SRCCOPY);

	BITMAP bitmap;
	CShotBmp.GetBitmap(&amp;bitmap);

	int size = bitmap.bmWidth*bitmap.bmHeight*bitmap.bmBitsPixel/8;
	BYTE *lpBits = new BYTE[size];

	::GetBitmapBits((HBITMAP)CShotBmp,size,lpBits);
	WriteBmp(&amp;bitmap,(int*)lpBits);

	return true;
}

void CPSDlg::WriteBmp(BITMAP *bmp, int* data)
{
	BITMAPINFO Bmi;
	memset(&amp;Bmi,0,sizeof(BITMAPINFO));
	Bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	Bmi.bmiHeader.biWidth = bmp-&gt;bmWidth;
	Bmi.bmiHeader.biHeight = bmp-&gt;bmHeight;
	Bmi.bmiHeader.biPlanes = 1;
	Bmi.bmiHeader.biBitCount =bmp-&gt;bmBitsPixel;
	Bmi.bmiHeader.biCompression = BI_RGB;
	Bmi.bmiHeader.biSizeImage = bmp-&gt;bmHeight*bmp-&gt;bmWidth*bmp-&gt;bmBitsPixel/8;

	FILE* image = fopen (&quot;C:\\Test.bmp&quot;,&quot;wb&quot;);
	if(image==0)
		return;

	int h = abs(Bmi.bmiHeader.biHeight);
	int w = abs(Bmi.bmiHeader.biWidth);
	Bmi.bmiHeader.biHeight=-h;
	Bmi.bmiHeader.biWidth=w;
	int sz = Bmi.bmiHeader.biSizeImage;

	BITMAPFILEHEADER bfh;
	bfh.bfType=('M'&lt;&lt;8)+'B'; 
	bfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
	bfh.bfSize=sz+bfh.bfOffBits; 
	bfh.bfReserved1=0; 
	bfh.bfReserved2=0;

	fwrite(&amp;bfh,sizeof(bfh),1,image);
	fwrite(&amp;Bmi.bmiHeader,sizeof(BITMAPINFOHEADER),1,image);
	fwrite(data,sz,1,image);
	fclose(image);
}
</code></pre>
<p>Im Voraus vielen Dank.<br />
Gruss Sven</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186499/8bit-und-16bit-screenshots</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 08:05:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186499.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Jul 2007 15:18:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 8bit und 16bit Screenshots on Mon, 09 Jul 2007 15:18:22 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem, ich erstelle Screenshots uns Speichere diese als BMP ab. Bei 32bit ist alles OK, bei 16bit ist ein blaustich drin, und bei 8bit ist es nur noch weiß. Wer kann mir da mal fix <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> weiterhelfen?</p>
<pre><code class="language-cpp">bool CPSDlg::Screenshot(CWnd* pWnd)
{
	CWindowDC CWndDC(pWnd);
	CDC CMemDC;
	CBitmap CShotBmp;

	CPalette* test;
	test = CWndDC.GetCurrentPalette();

	CMemDC.CreateCompatibleDC(&amp;CWndDC);

	CRect CClientRect;
	CClientRect.left = CClientRect.top = 0;
	CClientRect.right = ::GetSystemMetrics(SM_CXSCREEN);
	CClientRect.bottom = ::GetSystemMetrics(SM_CYSCREEN);

	CShotBmp.CreateCompatibleBitmap(&amp;CWndDC, CClientRect.Width(),CClientRect.Height());

	CMemDC.SelectObject(&amp;CShotBmp);
    CMemDC.BitBlt(0,0,CClientRect.Width(),CClientRect.Height(),&amp;CWndDC,0,0,SRCCOPY);

	BITMAP bitmap;
	CShotBmp.GetBitmap(&amp;bitmap);

	int size = bitmap.bmWidth*bitmap.bmHeight*bitmap.bmBitsPixel/8;
	BYTE *lpBits = new BYTE[size];

	::GetBitmapBits((HBITMAP)CShotBmp,size,lpBits);
	WriteBmp(&amp;bitmap,(int*)lpBits);

	return true;
}

void CPSDlg::WriteBmp(BITMAP *bmp, int* data)
{
	BITMAPINFO Bmi;
	memset(&amp;Bmi,0,sizeof(BITMAPINFO));
	Bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	Bmi.bmiHeader.biWidth = bmp-&gt;bmWidth;
	Bmi.bmiHeader.biHeight = bmp-&gt;bmHeight;
	Bmi.bmiHeader.biPlanes = 1;
	Bmi.bmiHeader.biBitCount =bmp-&gt;bmBitsPixel;
	Bmi.bmiHeader.biCompression = BI_RGB;
	Bmi.bmiHeader.biSizeImage = bmp-&gt;bmHeight*bmp-&gt;bmWidth*bmp-&gt;bmBitsPixel/8;

	FILE* image = fopen (&quot;C:\\Test.bmp&quot;,&quot;wb&quot;);
	if(image==0)
		return;

	int h = abs(Bmi.bmiHeader.biHeight);
	int w = abs(Bmi.bmiHeader.biWidth);
	Bmi.bmiHeader.biHeight=-h;
	Bmi.bmiHeader.biWidth=w;
	int sz = Bmi.bmiHeader.biSizeImage;

	BITMAPFILEHEADER bfh;
	bfh.bfType=('M'&lt;&lt;8)+'B'; 
	bfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
	bfh.bfSize=sz+bfh.bfOffBits; 
	bfh.bfReserved1=0; 
	bfh.bfReserved2=0;

	fwrite(&amp;bfh,sizeof(bfh),1,image);
	fwrite(&amp;Bmi.bmiHeader,sizeof(BITMAPINFOHEADER),1,image);
	fwrite(data,sz,1,image);
	fclose(image);
}
</code></pre>
<p>Im Voraus vielen Dank.<br />
Gruss Sven</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321640</guid><dc:creator><![CDATA[a.s.t_2003]]></dc:creator><pubDate>Mon, 09 Jul 2007 15:18:22 GMT</pubDate></item></channel></rss>