<?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[aus dem dc vom desktop eine bitmap machen?!]]></title><description><![CDATA[<p>ich würde gerne einen screenshot vom desktop machen, die daten sollen dann als bitmap in nem byte array vorliegen. hab auch was schönes gecodet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> :</p>
<pre><code class="language-cpp">class cDesktop{
private:
        HDC DesktopDC;
        HBITMAP DesktopBitmap;
        HDC HolderDC;
public:
        int GetDesktopBitmap();
        cDesktop();
};

cDesktop::cDesktop()
{
        //TODO: Hier Ihren Quelltext einfügen
        HolderDC=::GetDC(GetDesktopWindow());
        DesktopDC=CreateCompatibleDC(HolderDC);
        DesktopBitmap=CreateCompatibleBitmap(HolderDC,
                        GetDeviceCaps(HolderDC,HORZRES),
                        GetDeviceCaps(HolderDC,VERTRES));
        SelectObject(DesktopDC,DesktopBitmap);
}

int cDesktop::GetDesktopBitmap(){
        RECT r;
        GetWindowRect(GetDesktopWindow(),&amp;r);
        BitBlt(DesktopDC,r.left,r.top,r.right,r.bottom,
                HolderDC,r.left,r.top,SRCCOPY);
//        BITMAPINFO bla;
        struct _BMInfo {
		BOOL			truecolour;
		BITMAPINFO		bmi;
		// Colormap info - comes straight after BITMAPINFO - **HACK**
		RGBQUAD			cmap[256];
	} m_bminfo;
/*        memset(bla,0,sizeof(bla));
        bla.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
        bla.bmiHeader.biBitCount=0;            */
        memset(&amp;m_bminfo, 0, sizeof(m_bminfo));
	m_bminfo.bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	m_bminfo.bmi.bmiHeader.biBitCount = 0;
        BYTE *buffer;
        GetDIBits(DesktopDC,DesktopBitmap,r.top,r.bottom,&amp;buffer,&amp;m_bminfo.bmi,DIB_RGB_COLORS);
        xxxBMP_Speichern(buffer,r.right,r.bottom,&quot;temp.bmp&quot;);
        return 0;
}
</code></pre>
<p>so,leider funkzt das ganze nicht, buffer bleibt leer. ich muss zugeben,dass ich nicht ganz sicher bin was ich da genau gemacht hab,hatte mir ein leider zu komplexes beispielprog rausgesucht und versucht das ganze nach zu ahmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/78612/aus-dem-dc-vom-desktop-eine-bitmap-machen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 18:27:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/78612.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Jul 2004 09:25:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to aus dem dc vom desktop eine bitmap machen?! on Sat, 03 Jul 2004 09:25:17 GMT]]></title><description><![CDATA[<p>ich würde gerne einen screenshot vom desktop machen, die daten sollen dann als bitmap in nem byte array vorliegen. hab auch was schönes gecodet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> :</p>
<pre><code class="language-cpp">class cDesktop{
private:
        HDC DesktopDC;
        HBITMAP DesktopBitmap;
        HDC HolderDC;
public:
        int GetDesktopBitmap();
        cDesktop();
};

cDesktop::cDesktop()
{
        //TODO: Hier Ihren Quelltext einfügen
        HolderDC=::GetDC(GetDesktopWindow());
        DesktopDC=CreateCompatibleDC(HolderDC);
        DesktopBitmap=CreateCompatibleBitmap(HolderDC,
                        GetDeviceCaps(HolderDC,HORZRES),
                        GetDeviceCaps(HolderDC,VERTRES));
        SelectObject(DesktopDC,DesktopBitmap);
}

int cDesktop::GetDesktopBitmap(){
        RECT r;
        GetWindowRect(GetDesktopWindow(),&amp;r);
        BitBlt(DesktopDC,r.left,r.top,r.right,r.bottom,
                HolderDC,r.left,r.top,SRCCOPY);
//        BITMAPINFO bla;
        struct _BMInfo {
		BOOL			truecolour;
		BITMAPINFO		bmi;
		// Colormap info - comes straight after BITMAPINFO - **HACK**
		RGBQUAD			cmap[256];
	} m_bminfo;
/*        memset(bla,0,sizeof(bla));
        bla.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
        bla.bmiHeader.biBitCount=0;            */
        memset(&amp;m_bminfo, 0, sizeof(m_bminfo));
	m_bminfo.bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	m_bminfo.bmi.bmiHeader.biBitCount = 0;
        BYTE *buffer;
        GetDIBits(DesktopDC,DesktopBitmap,r.top,r.bottom,&amp;buffer,&amp;m_bminfo.bmi,DIB_RGB_COLORS);
        xxxBMP_Speichern(buffer,r.right,r.bottom,&quot;temp.bmp&quot;);
        return 0;
}
</code></pre>
<p>so,leider funkzt das ganze nicht, buffer bleibt leer. ich muss zugeben,dass ich nicht ganz sicher bin was ich da genau gemacht hab,hatte mir ein leider zu komplexes beispielprog rausgesucht und versucht das ganze nach zu ahmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552193</guid><dc:creator><![CDATA[fux2]]></dc:creator><pubDate>Sat, 03 Jul 2004 09:25:17 GMT</pubDate></item></channel></rss>