<?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[Screenshot mit beliebigen Farbwerten]]></title><description><![CDATA[<p>Hi @ All.</p>
<p>Ich habe vor, einen screenshooter zu erstellen, der den Shot in verschiedenen Farbwerten erstellen kann.<br />
Dazu habe ich bereits etwas ausprobiert. Als erstes wollte ich einen 8Bit-screenshot erstellen.<br />
Aber das will nicht so richtig gehen.</p>
<pre><code class="language-cpp">#pragma comment(lib,&quot;shlwapi.lib&quot;)
#pragma comment(lib, &quot;Msimg32.lib&quot;)
#pragma comment(lib,&quot;Gdi32.lib&quot;);

#define _WIN32_WINNT 0x0500

#include &lt;windows.h&gt;
#include &lt;shlwapi.h&gt;
#include &lt;math.h&gt;
#include &lt;time.h&gt;
#include &lt;tchar.h&gt;

int WINAPI WinMain(HINSTANCE hInstance,
				   HINSTANCE hPrevInstance,
				   LPSTR     lpCmdLine,
				   int       nShowCmd)
{
	// First of all, get desktop dc, rectangle
	HDC hDesktopDC = GetDC(0);
	RECT rDesktop; GetClientRect(GetDesktopWindow(),&amp;rDesktop);

	// Now create the new screenshot
	HDC hScreenshotDC = CreateCompatibleDC(hDesktopDC);
	HBITMAP hScreenshotBitmap = CreateCompatibleBitmap(hDesktopDC,rDesktop.right-rDesktop.left,rDesktop.bottom-rDesktop.top);
	SelectObject(hScreenshotDC,hScreenshotBitmap);
	RECT rScreenshot = rDesktop;

	BITMAPINFO biScreenshot;
	biScreenshot.bmiColors[0] = 8;
	GetDIBits(hScreenshotDC,
		hScreenshotBitmap,
		0,rDesktop.bottom-rDesktop.top,
		NULL,
		biScreenshot,
		DIB_PAL_COLORS);

	BitBlt(hScreenshotDC,
			0,0,
			rDesktop.right-rDesktop.left,rDesktop.bottom-rDesktop.top,
			hDesktopDC,
			rDesktop.left,rDesktop.top,
			SRCCOPY);

	DWORD dwMilliseconds = 10000;
	DWORD dwStart,dwNow;
	dwStart = dwNow = GetTickCount();
	while ((dwNow-dwStart &lt;= dwMilliseconds) &amp;&amp; (dwNow &gt;= dwStart))
	{
	BitBlt(hDesktopDC,
			rDesktop.left,rDesktop.top,
			rDesktop.right-rDesktop.left,rDesktop.bottom-rDesktop.top,
			hScreenshotDC,
			0,0,
			SRCCOPY);
		Sleep(40);
		dwNow = GetTickCount();
	}

	return 0;
}
</code></pre>
<p>Wäre sehr dankbar, wenn einer helfen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189933/screenshot-mit-beliebigen-farbwerten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 16:32:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189933.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Aug 2007 18:41:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 18:41:46 GMT]]></title><description><![CDATA[<p>Hi @ All.</p>
<p>Ich habe vor, einen screenshooter zu erstellen, der den Shot in verschiedenen Farbwerten erstellen kann.<br />
Dazu habe ich bereits etwas ausprobiert. Als erstes wollte ich einen 8Bit-screenshot erstellen.<br />
Aber das will nicht so richtig gehen.</p>
<pre><code class="language-cpp">#pragma comment(lib,&quot;shlwapi.lib&quot;)
#pragma comment(lib, &quot;Msimg32.lib&quot;)
#pragma comment(lib,&quot;Gdi32.lib&quot;);

#define _WIN32_WINNT 0x0500

#include &lt;windows.h&gt;
#include &lt;shlwapi.h&gt;
#include &lt;math.h&gt;
#include &lt;time.h&gt;
#include &lt;tchar.h&gt;

int WINAPI WinMain(HINSTANCE hInstance,
				   HINSTANCE hPrevInstance,
				   LPSTR     lpCmdLine,
				   int       nShowCmd)
{
	// First of all, get desktop dc, rectangle
	HDC hDesktopDC = GetDC(0);
	RECT rDesktop; GetClientRect(GetDesktopWindow(),&amp;rDesktop);

	// Now create the new screenshot
	HDC hScreenshotDC = CreateCompatibleDC(hDesktopDC);
	HBITMAP hScreenshotBitmap = CreateCompatibleBitmap(hDesktopDC,rDesktop.right-rDesktop.left,rDesktop.bottom-rDesktop.top);
	SelectObject(hScreenshotDC,hScreenshotBitmap);
	RECT rScreenshot = rDesktop;

	BITMAPINFO biScreenshot;
	biScreenshot.bmiColors[0] = 8;
	GetDIBits(hScreenshotDC,
		hScreenshotBitmap,
		0,rDesktop.bottom-rDesktop.top,
		NULL,
		biScreenshot,
		DIB_PAL_COLORS);

	BitBlt(hScreenshotDC,
			0,0,
			rDesktop.right-rDesktop.left,rDesktop.bottom-rDesktop.top,
			hDesktopDC,
			rDesktop.left,rDesktop.top,
			SRCCOPY);

	DWORD dwMilliseconds = 10000;
	DWORD dwStart,dwNow;
	dwStart = dwNow = GetTickCount();
	while ((dwNow-dwStart &lt;= dwMilliseconds) &amp;&amp; (dwNow &gt;= dwStart))
	{
	BitBlt(hDesktopDC,
			rDesktop.left,rDesktop.top,
			rDesktop.right-rDesktop.left,rDesktop.bottom-rDesktop.top,
			hScreenshotDC,
			0,0,
			SRCCOPY);
		Sleep(40);
		dwNow = GetTickCount();
	}

	return 0;
}
</code></pre>
<p>Wäre sehr dankbar, wenn einer helfen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347048</guid><dc:creator><![CDATA[Script-Styler]]></dc:creator><pubDate>Sat, 18 Aug 2007 18:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 19:41:02 GMT]]></title><description><![CDATA[<p>Was mir spontan auffällt: Die Farbtiefe setzt man nicht über bmiColors (das wäre die Farbpalette)</p>
<p>Bei biScreenshot.bmiHeader setzt du die gewünschte Farbtiefe und sonstiges Zeugs!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347063</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sat, 18 Aug 2007 19:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 19:49:54 GMT]]></title><description><![CDATA[<p>Tja... scheiße wenn man nur &quot;Copy &amp; Past&quot; programmierung verwendet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347066</guid><dc:creator><![CDATA[gosha16]]></dc:creator><pubDate>Sat, 18 Aug 2007 19:49:54 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 21:04:15 GMT]]></title><description><![CDATA[<p>was???</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13235">@gosha16</a>: willste mich verarschen!!!<br />
das hab ich mir alles selber geschrieben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/41">@geeky</a>: ja. aber danke für den header-info</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347093</guid><dc:creator><![CDATA[Script-Styler]]></dc:creator><pubDate>Sat, 18 Aug 2007 21:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 21:15:08 GMT]]></title><description><![CDATA[<p>Tut mir leid das ich dir das nciht glauben <strong>kann</strong><br />
Wenn dann hättest du es wohl auch verstanden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347098</guid><dc:creator><![CDATA[gosha16]]></dc:creator><pubDate>Sat, 18 Aug 2007 21:15:08 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 21:31:26 GMT]]></title><description><![CDATA[<p>das ist nicht wahr.</p>
<p>das mit dem GetDC und der CreateCompatibleDC/Bitmap-Variante schon, aber das mit dem GetDIBits oder sowas war mir neu und deswegen habe ich gedacht, mann muss die Zahl da so reinschreiben.<br />
sry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347104</guid><dc:creator><![CDATA[Script-Styler]]></dc:creator><pubDate>Sat, 18 Aug 2007 21:31:26 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 21:41:21 GMT]]></title><description><![CDATA[<p>so,ich hab jetz</p>
<pre><code class="language-cpp">biScreenshot.bmiHeader.biBitCount = 8;
</code></pre>
<p>muss ich die bitmap-infostruktur vorher von dem hBitmap laden oer wie mache ich dass? das will nicht so richtig gehen.</p>
<p>thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347110</guid><dc:creator><![CDATA[Script-Styler]]></dc:creator><pubDate>Sat, 18 Aug 2007 21:41:21 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 22:43:21 GMT]]></title><description><![CDATA[<p>msdn schrieb:</p>
<blockquote>
<p>If the lpvBits parameter is a valid pointer, the first six members of the BITMAPINFOHEADER structure must be initialized to specify the size and format of the DIB.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1347131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347131</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sat, 18 Aug 2007 22:43:21 GMT</pubDate></item><item><title><![CDATA[Reply to Screenshot mit beliebigen Farbwerten on Sat, 18 Aug 2007 23:11:47 GMT]]></title><description><![CDATA[<p>Hi !<br />
Du brauchst folgende Strukturen und Variablen:</p>
<p>BITMAPINFO* pbi;<br />
BITMAPINFOHEADER bmih;<br />
BITMAPFILEHEADER bmfh;<br />
unsigned char* dibwerte;</p>
<p>Wenn du den Screenshot speichern willst, müssen<br />
bmih und bmfh korrekt initialisiert sein !<br />
( bmih.biPlanes = 1 nicht vergessen zu setzen, bmfh.bfType = 0x4D42 usw... )</p>
<p>DIB_RGB_COLORS als Parameter verwenden, dann werden RGBQUADS als Farbtabelle geschrieben und du kannst den Screenshot auch in Paint oder anderen Grafikprogrammen bearbeiten.</p>
<p>In pbi muss der Header und die Farbtabelle reinpassen, also<br />
( 1 &lt;&lt; bits_pixel ) * sizeof( RGBQAD ) Bytes haben.</p>
<p>Wenn bits_pixel &gt; 24 ist, entfällt die obige Zeile.</p>
<p>Zeiger setzen:<br />
pbi-&gt;bmiHeader = bmih;</p>
<p>Du rufst GetDIBits ohne Puffer für die Pixeldaten auf, aber die Farbwerte müssen ja irgendwo rein also musst du nen<br />
Puffer für die Pixelwerte organisieren ( char* dibwerte ), Größe des Puffers:<br />
((((bmih.biWidth * bmih.biBitCount) + 31) &amp; ~31) &gt;&gt; 3) * bmih.biHeight<br />
Bytes.</p>
<p>GetDIBits nach BitBlt aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1347138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1347138</guid><dc:creator><![CDATA[Zausel]]></dc:creator><pubDate>Sat, 18 Aug 2007 23:11:47 GMT</pubDate></item></channel></rss>