<?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[In Bitmap speichern...]]></title><description><![CDATA[<p>Ich habe eine dialog. basierende Anwendung erstellt, welche etwas auf den Bildschirm zeichnet und auch ausdruckt. Nun soll es aber auch möglich sein, das ganze in eine Datei zu speichern, am besten so dass es nicht mehr veränderbar ist. Super wär also pdf, fällt aber wegen der Lizens raus. Nun bin ich auf die Idee gekommen, alles einfach in einem Bitmap zu speichern. Aber wie kann ich das am geschicktesten anstellen?? Oder hat noch jemand ne andere Idee??!<br />
Big thx!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/52636/in-bitmap-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 17:07:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/52636.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Oct 2003 05:34:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 05:34:04 GMT]]></title><description><![CDATA[<p>Ich habe eine dialog. basierende Anwendung erstellt, welche etwas auf den Bildschirm zeichnet und auch ausdruckt. Nun soll es aber auch möglich sein, das ganze in eine Datei zu speichern, am besten so dass es nicht mehr veränderbar ist. Super wär also pdf, fällt aber wegen der Lizens raus. Nun bin ich auf die Idee gekommen, alles einfach in einem Bitmap zu speichern. Aber wie kann ich das am geschicktesten anstellen?? Oder hat noch jemand ne andere Idee??!<br />
Big thx!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376921</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 05:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 06:17:02 GMT]]></title><description><![CDATA[<pre><code>/*
WriteBitmap - Speichern einer 24 Bit True-Color Bitmap aus einem Bitmap-Handle.
szFile		= E:Dateiname
hbitmap		= E:Handle auf ein Speicherkontext oder eine Bitmap
memdc		= E:ein Speicherkontext in dem sich eine Kopie der Bitmap befindet
R: Flag ob erfolgreich oder nicht...
*/
BOOL WriteBitmap( LPTSTR szFile, HBITMAP hbitmap, HDC memdc)
{
  BITMAP  bmp;
  //Informationen über die übergebene Bitmap sammeln, bmp ist der Zielpuffer der Infos
  if(GetObject(hbitmap, sizeof(BITMAP), &amp;bmp))   
  {     
    BITMAPINFOHEADER BmpInfoHdr;  //Struktur für Bitmap-Infoheader 
    BITMAPFILEHEADER BmpFileHdr;  //Struktur für Bitmap-Dateiheader
    //jetzt werden die gesammlten Infos in bmp ausgewertet und in die Strukts umgeschrieben
    BmpInfoHdr.biSize = sizeof(BITMAPINFOHEADER);     
    BmpInfoHdr.biWidth = bmp.bmWidth;     
    BmpInfoHdr.biHeight = bmp.bmHeight;     
    BmpInfoHdr.biPlanes = bmp.bmPlanes;     
    BmpInfoHdr.biBitCount = 24;     
    BmpInfoHdr.biCompression	= BI_RGB;     
    BmpInfoHdr.biSizeImage		= bmp.bmWidth*bmp.bmHeight*3;     
    BmpFileHdr.bfType		= 0x4d42;     
    BmpFileHdr.bfReserved1		= 0;     
    BmpFileHdr.bfReserved2		= 0;     
    BmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);     
    BmpFileHdr.bfSize = BmpFileHdr.bfOffBits+BmpInfoHdr.biSizeImage;  

    //Heap-Speicher für die ins DIB-Format zu konvertierende Bitmap organisieren
    bmp.bmBits = (void*)GlobalAlloc(GMEM_FIXED, BmpInfoHdr.biSizeImage); 

    //Bitmap ins DIB-Format umwandeln, wenn erfolgreich wird die DIB geschrieben
    if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits, 
        (BITMAPINFO*)&amp;BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight)      
    {     
      //Datei erzeugen über Win-API (ist performanter als fstream-Funktionen)
	HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); 
      //Datei erzeugen erfolgreich?
      if(hFile != INVALID_HANDLE_VALUE)  {          
        //hier wird die Anzahl der geschriebenen Bytes abgelegt, aber nicht ausgewertet
        DWORD dwTmp;  
        //Bitmap-Dateiheader schreiben
        WriteFile(hFile, &amp;BmpFileHdr, sizeof(BITMAPFILEHEADER), &amp;dwTmp, NULL);           
        //Bitmap-Infoheader schreiben
        WriteFile(hFile, &amp;BmpInfoHdr, sizeof(BITMAPINFOHEADER), &amp;dwTmp, NULL);           
        //Bitmap-Pixeldaten schreiben
        WriteFile(hFile, bmp.bmBits,  BmpInfoHdr.biSizeImage,   &amp;dwTmp, NULL);         
        }   
      //Datei schliessen
      CloseHandle(hFile);      
    }     
    //Heapspeicher freigeben
    GlobalFree(bmp.bmBits); 
    return TRUE;
  } 
  //Nicht erfolgreich gewesen, leider leider ...
  return FALSE;
}
</code></pre>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376936</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 06:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 06:22:40 GMT]]></title><description><![CDATA[<p>Wow, danke!! Werds gleich mal ausprobieren!<br />
Gruß Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376940</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 06:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 06:56:06 GMT]]></title><description><![CDATA[<p>Sorry, aber leider blick ich noch nicht ganz durch: Muß ich jetzt ein neues Bitmap per CBitmap ertsllen und das was ich auf den Bildschirm zeichne da hinein zeichnen und das ganze dann der Methode übergeben??? Bin noch ziemlich neu in dem Geschäft, würd mich freuen wenn nochmal jemand weiterhelfen könnte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376959</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 06:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 07:52:55 GMT]]></title><description><![CDATA[<p>Also da Du schon die Bitmap auf Schirm zeichnest und auch ausdruckst brauchst diese Bitmap auch nur noch an die Funktion übergeben. Eine neue erzeugen ist nicht nötig.</p>
<p>BOOL WriteBitmap( LPTSTR szFile, HBITMAP hbitmap, HDC memdc);</p>
<p>hbitmap ist das Handle auf Deine existierende Bitmap (jene, welche Du zum Drucken und zum Zeichnen auf dem Schirm verwendest).<br />
Sicherlich verwendest Du bereits ein CBitmap-Objekt, das Handle davon bekommst Du über BMPObjekt.operator HBITMAP( ) geliefert.<br />
memdc ist das Handle auf den aktuellen Gerätekontext, das bekommst von Deiner Dialoginstanz über instanz.m_hDC oder auch über this-&gt;m_hDC.</p>
<p>Also sind diese Informationen und der Zieldateiname nur an die Funktion zu übergeben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376975</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 07:52:55 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 08:02:10 GMT]]></title><description><![CDATA[<p>Also zum zeichnen auf dem Bildschirm und zum drucken verwende ich kein Bitmap, ich mach da folgendes (auf bildschrim):</p>
<pre><code class="language-cpp">CPaintDC dc(this);
dc.MoveTo(...);
dc.LineTo(...);
</code></pre>
<p>usw.<br />
jetzt hab ich folgendes versucht:</p>
<pre><code class="language-cpp">CBitmap bitmap;
bitmap.CreateBitmap( 1000, 900, 1,24, NULL ); 
CDC MemDC; 
CDC* pDC = GetDC(); 
MemDC.CreateCompatibleDC( pDC ); 
MemDC.SelectObject(bitmap); 
HBITMAP hBitmap=bitmap;
ZeichneEtwas(&amp;MemDC);
WriteBitmap(&quot;c:\test&quot;, hBitmap, MemDC);
</code></pre>
<p>Die ZeichneEtwas Methode übernimmt den Gerätekontext, also entwerder CPaint dc zum auf den Bildschirm zeichnen oder CDC PrintDc zum drucken. Jetzt wollte ich also einfach in das Bitmap zeichnen. Die Funktion liefert mir ja auch TRUE zurück, nur leider finde ich niergend die Datei &quot;test&quot;?????!!!!<br />
Bin am verzweifeln!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376979</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 08:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 08:06:22 GMT]]></title><description><![CDATA[<p>verwende statt:</p>
<p>WriteBitmap(&quot;c:\test&quot;, hBitmap, MemDC);</p>
<p>lieber mal</p>
<p>WriteBitmap(&quot;c:**\**test&quot;, hBitmap, MemDC); //fett markiert</p>
<p>Das Zeichen '\' stellt eine Escape-Steuersequenz dar, will man das Zeichen selbst haben muss es &quot;maskiert&quot; werden, damit der Kompiler kein \t draus macht, was in diesem falle ein Tabulatorzeichen wäre!</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376981</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 08:06:22 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 08:11:54 GMT]]></title><description><![CDATA[<p>Danke, aber leider funktioniert das auch nicht, er erstellt keine Datei!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376983</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 08:11:54 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 08:29:14 GMT]]></title><description><![CDATA[<p>ich komm da echt nicht weiter :(((<br />
Kannst du mir mal ein bißchen code schreiben, der ein Bitmap erstellt,<br />
eine Linie rein malt und dann das Bitmap mit der Funktion in eine Datei speichert??<br />
Das wär echt super!!<br />
Danke im Vorraus,<br />
Gruß Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/376988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/376988</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 08:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 11:27:40 GMT]]></title><description><![CDATA[<p>Also du verwendest bis jetzt folgenden Code:</p>
<pre><code>CBitmap bitmap; 
bitmap.CreateBitmap( 1000, 900, 1,24, NULL );  
CDC MemDC;  
CDC* pDC = GetDC();  
MemDC.CreateCompatibleDC( pDC );  
MemDC.SelectObject(bitmap);  
HBITMAP hBitmap=bitmap; 
ZeichneEtwas(&amp;MemDC); 
WriteBitmap(&quot;c:\test&quot;, hBitmap, MemDC);
</code></pre>
<p>Da fehlt nur noch ein wenig.</p>
<pre><code>CBitmap bitmap; 
bitmap.CreateBitmap( 1000, 900, 1,24, NULL );  
CDC MemDC;  
CDC* pDC = GetDC();  
MemDC.CreateCompatibleDC( pDC );  
MemDC.SelectObject(bitmap);  
ZeichneEtwas(&amp;MemDC); 
pDC-&gt;SelectObject(bitmap);
pDC-&gt;BitBlt(0,0,1000,900, &amp;MemDC, 0,0, SRCCOPY); //Inhalt des MemDC in Bitmap blitten
WriteBitmap(&quot;c:\\test.bmp&quot;, Bitmap.operator HBITMAP(), pDC-&gt;m_hDC);
</code></pre>
<p>Sollte das nicht gehen wäre es gut mal ins Projekt zu sehen, kannst Du eventl.<br />
das Projekt zipped irgendwohin stellen? (ohne Debug Verzeichnis!)</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377148</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 11:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 11:54:50 GMT]]></title><description><![CDATA[<p>Leider funktoniert es immer noch nicht. Es passiert einfach gar nichts, keine Datei wird erstellt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Das Projekt kann ich leider nicht zeigen, ist für eine Firma. Ich habe mal eine komplett neue Klasse erstellt, mit einem &quot;Save&quot; Button und will nur eine Linie in das Bitmap zeichnen:</p>
<pre><code class="language-cpp">void CZeichnen::OnSave() 
{

	CBitmap bitmap;  
	bitmap.CreateBitmap( 1000, 900, 1,24, NULL );   
	CDC MemDC;   
	CDC* pDC = GetDC();   
	MemDC.CreateCompatibleDC( pDC );   
	MemDC.SelectObject(bitmap);   
	MemDC.MoveTo(10,10);
	MemDC.LineTo(100,100);
	pDC-&gt;SelectObject(bitmap); 
	pDC-&gt;BitBlt(0,0,1000,900, &amp;MemDC, 0,0, SRCCOPY); 
	WriteBitmap(&quot;c:\\test.bmp&quot;, bitmap.operator HBITMAP(), pDC-&gt;m_hDC);

}
</code></pre>
<p>Das müßte doch auf jeden Fall funktionieren, unabhängig vom rest des Codes, oder???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377190</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 11:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 13:04:33 GMT]]></title><description><![CDATA[<p>Ich kann jetzt erstmal nur noch empfehlen durch die WriteBitmap mit dem Debugger zu gehen und mit die Stelle <strong>wo</strong> er mit <strong>welchem</strong> Ergebnis aussteigt...</p>
<p>Wenn man nicht reinsehen kann ist es schwer ;), aber OK - muss man halt durch</p>
<p>Also poste mir mal das Zeug, dann sehen wir weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377307</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 13:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 13:17:40 GMT]]></title><description><![CDATA[<p>Hab es debugt, er führt diese Anweisung nicht aus:</p>
<pre><code class="language-cpp">if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits,  
        (BITMAPINFO*)&amp;BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight)
</code></pre>
<p>Hier die Ergebnisse:<br />
- BmpFileHdr {...}<br />
bfType 19778<br />
bfSize 2700054<br />
bfReserved1 0<br />
bfReserved2 0<br />
bfOffBits 54<br />
- BmpInfoHdr {...}<br />
biSize 40<br />
biWidth 1000<br />
biHeight 900<br />
biPlanes 1<br />
biBitCount 24<br />
biCompression 0<br />
biSizeImage 2700000<br />
biXPelsPerMeter -858993460<br />
biYPelsPerMeter -858993460<br />
biClrUsed 3435973836<br />
biClrImportant 3435973836<br />
+ this 0x00120648 {CZeichnen hWnd=0x0b8c0720}<br />
- szFile 0x00602268 &quot;d:\test.bmp&quot;<br />
100 'd'<br />
- hbitmap 0x4b050683<br />
unused CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden<br />
- memdc 0xa6010215<br />
unused CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden<br />
- bmp {...}<br />
bmType 0<br />
bmWidth 1000<br />
bmHeight 900<br />
bmWidthBytes 3000<br />
bmPlanes 1<br />
bmBitsPixel 24<br />
bmBits 0x01610020</p>
<p>Hoffe du kannst damit etwas anfangen...<br />
Nochmal vielen Dank für deine Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377327</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 13:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 13:40:47 GMT]]></title><description><![CDATA[<p>Jetzt hab ich mal die if-Schleife auskommentiert (also NUR das if und == BmpInfoHdr.biHeight), dann erhalte ich eine Datei, allerdings ist sie komplett schwarz!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377356</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 13:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 15:07:04 GMT]]></title><description><![CDATA[<p>Ich mach nacher (wird leider erst so in 20 Minuten werden) mal ein MFC-Projekt<br />
wo eine Bitmap erzeugt (male irgendwas rein) und dann gespeichert wird. Das Projekt stell ich dann auf ne HP wo Du es ziehen kannst - also nur die Sourcen (keine EXE). Nimm das als Referenzprojekt und wenn dann noch Fragen sind meld dich halt wieder...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377468</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 15:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 15:14:14 GMT]]></title><description><![CDATA[<p>Das wär echt Klasse, vielen Dank schon mal im vorraus!!! Macht nix wenn es etwas länger geht, arbeite eh erst morgen dran weiter!<br />
Viele Grüße<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377475</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 15:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 15:50:31 GMT]]></title><description><![CDATA[<p>So nun ist das Projekt fertig, aber dummerweise hab ich meine URL-PWD nicht mit in der Stadt wo ich gerade arbeite. Ich hab ein MFC-SDI Projekt erzeugt und nur die OnPaint gefüllt, bei mir wird sauber eine Bitmap erzeugt. Den Quellcode der WriteBitmap habe ich nicht verändert.</p>
<p>Also vielleicht hilft die auch der Code der OnPaint:</p>
<pre><code>void CChildView::OnPaint() 
{
  CPaintDC dc(this); // Gerätekontext zum Zeichnen

  //na dann, malen wir mal irgendwas was ins HDC
  dc.Rectangle(rand()%50,rand()%50,600, 600);
  RECT r;
  CBrush brush;
  r.left=rand()%50;
  r.top=rand()%50;
  r.bottom=rand()%800;
  r.right=rand()%800;
  brush.CreateSolidBrush(RGB(255,255,0));
  //ein gelbes Rechteck
  dc.FillRect(&amp;r, &amp;brush);
  //auch noch einen Text
  dc.TextOut(100,100,&quot;Das ist ein Text in einer Bitmap!&quot;);

  //jetzt das ganze als Bitmap abspeichern
  CBitmap bmp; //Bitmap-Objekt
  CDC memdc;	//Speicherkontext
  RECT cr;	//für die Grösse des Clients

  memdc.CreateCompatibleDC((CDC*)&amp;dc);
  GetClientRect(&amp;cr); //Ausdehnung des Clientsbereichs ermitteln
  //passende Bitmap in der Grösse des Clients anlegen
  bmp.CreateCompatibleBitmap((CDC*)&amp;dc, cr.right,cr.bottom); 

  //Speicherkontext mit der Bitmap verbinden
  memdc.SelectObject(bmp);
  //In den Speicherkontext (eigentlich in die Bitmap!) den Inhalt des dc kopieren
  memdc.BitBlt(0,0,cr.right,cr.bottom,(CDC*)&amp;dc,0,0,SRCCOPY);

  //Jetzt die Bitmap speichern
  WriteBitmap(&quot;c:\\testbitmap.bmp&quot;,bmp.operator HBITMAP(), memdc.m_hDC);

  // Rufen Sie nicht CWnd::OnPaint() für Nachrichten zum Zeichnen auf
}
</code></pre>
<p>Bei mir funktioniert das wie es soll. Wenn man das Fenster scaliert, wird immer<br />
eine neue Zeichnung erstellt und in die Bitmap-Datei geschrieben.<br />
Sollte für ne Demo auch reichen...</p>
<p>Schreib wieder bei Fragen.<br />
Gruss René</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377488</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 15:50:31 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 16:14:37 GMT]]></title><description><![CDATA[<p>Vielen Dank, werd es gleich morgen ausprobieren, sobald ich auf arbeit bin!<br />
Werd dann das Ergebnis hier posten!</p>
<p>Schönen Abend noch und viele Grüße<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377501</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 16:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 16:23:30 GMT]]></title><description><![CDATA[<p>Jetzt habe ich mal kurz eine dialogf. Anwendung erstellt mit einem Button &quot;Speichern&quot; in OnClicked() habe ich den Code kopiert. Jetzt wird zwar ein Bitmap erstellt aber in diesem ist ein Screenshot von meinem Dialog!! Liegt das daran dass ich es nicht in OnPaint() oder wie kann denn das kommen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377507</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Wed, 22 Oct 2003 16:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Wed, 22 Oct 2003 16:25:53 GMT]]></title><description><![CDATA[<p>Also gut, dann bis morgen und auch schönen Feierabend!</p>
<p>Gruss René</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377509</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Wed, 22 Oct 2003 16:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Thu, 23 Oct 2003 05:52:25 GMT]]></title><description><![CDATA[<p>Guten morgen <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="🙂"
    /><br />
Das funktioniert jetzt alles echt wunderbar, nur ein Problem besteht noch: Er zeichnte mir das was er in die Datei zeichnet auch auf den Bildschirm!! Dadurch überschreibt er mir meine Grafik! Erst wenn ich das Fenster minimiere und wieder maximiere ist wieder alles beim alten! Hast du dafür eine Lösungsidee??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377763</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Thu, 23 Oct 2003 05:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Thu, 23 Oct 2003 06:15:27 GMT]]></title><description><![CDATA[<p>Das Problem stellt sich doch noch etwas anderst dar, er macht folgendes: Er zeichnet erst auf den Bildschirm, macht dann vom ganzen Bildschirm einen Screenshot und speichert das in der Datei. Wenn ich nämlich den Bereich größer mache sehe ich sogar die Taskleiste im Bitmap! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Ich verzweifle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/377772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377772</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Thu, 23 Oct 2003 06:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Thu, 23 Oct 2003 06:18:27 GMT]]></title><description><![CDATA[<p>Du musst halt meine Zeichenfunktionen rausnehmen und Du solltest auch GetCLientRect aufrufen um die Grösse deines Zeichenfensters zu ermitteln.<br />
Ich hab in dem Beispiel die Bitmap genau in dessen Grösse erstellt. Machst<br />
Du die Bitmap grösser bekommst du auch Pixel ausserhalb Deines Fensters in die Bitmap gelegt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377775</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Thu, 23 Oct 2003 06:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Thu, 23 Oct 2003 06:41:41 GMT]]></title><description><![CDATA[<p>Ja, das hab ich schon gemacht, aber das Problem ist halt dass in die Bitmap etwas anderes soll als das was auf dem Bildschirm ist, deshalb muß sie ja auch größer sein! Das in der bitmap soll total unabhängig von dem aufm Bildschirm sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377785</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Thu, 23 Oct 2003 06:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Thu, 23 Oct 2003 08:09:00 GMT]]></title><description><![CDATA[<p>Also ich konnte Dir nur soweit helfen das Du eine Bitmap erzeugen kannst.<br />
Um jetzt nun genau zu wissen WAS in die Bitmap rein soll, muss ich halt auch mal<br />
in den Code sehen können. Da das nicht geht, brauche ich dann eben ganz detailierte Informationen<br />
darüber. Sonst wird das ganz schwer und ist nur ein rumgerate und probieren...</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/377823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377823</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Thu, 23 Oct 2003 08:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to In Bitmap speichern... on Thu, 23 Oct 2003 08:23:31 GMT]]></title><description><![CDATA[<p>Okay, also ich versuch das mal zu erklären:<br />
Ich habe neben vielen, vielen anderen Funktionen, die alle etwas auf den Bildschirm zeichnen diese Funktion:</p>
<pre><code class="language-cpp">//Zeichnet das Koordinatensystem
CZeichnen::ZeichneKoordinatensys(CDC *pDC)
{
double druckenVerschieb=0;
if(m_druckenFaktor.x!=1)
   druckenVerschieb=m_druckenMitte.x;

   //Y-Achse mit Pfeil
pDC-&gt;MoveTo(80*m_druckenFaktor.x,605*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;LineTo(80*m_druckenFaktor.x,100*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;MoveTo(80*m_druckenFaktor.x,100*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;LineTo(75*m_druckenFaktor.x,107*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;MoveTo(80*m_druckenFaktor.x,100*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;LineTo(85*m_druckenFaktor.x,107*m_druckenFaktor.y+druckenVerschieb);

  //X-Achse mit Pfeil
pDC-&gt;MoveTo(75*m_druckenFaktor.x,600*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;LineTo(700*m_druckenFaktor.x,600*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;LineTo(693*m_druckenFaktor.x,595*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;MoveTo(700*m_druckenFaktor.x,600*m_druckenFaktor.y+druckenVerschieb);
pDC-&gt;LineTo(693*m_druckenFaktor.x,605*m_druckenFaktor.y+druckenVerschieb);
</code></pre>
<p>So, wenn der Anwender jetzt auf den &quot;Speichern&quot; Button klickt, dann soll diese, und NUR diese Funktion in ein Bitmap mit weißem Hintergrund gezeichnet und gepseichert werden.<br />
Ich habe jetzt folgendes probiert:</p>
<pre><code class="language-cpp">void CZeichnen::OnSave() 
{	
static char BASED_CODE szFilter[]=&quot;Bitmap-Dateien (*.bmp)|*.bmp||&quot;;
CString filename;
CFileDialog saveFile(FALSE, &quot;.bmp&quot;, filename, OFN_HIDEREADONLY,szFilter);

  if(saveFile.DoModal()==IDOK)
  {
	CDC *cdc; 
	cdc=GetDC();
	cdc-&gt;Rectangle(0,0,900, 1000); 

	ZeichneKoordinatensys(cdc);

	//jetzt das ganze als Bitmap abspeichern 
	CBitmap bmp; //Bitmap-Objekt 
	CDC memdc;    //Speicherkontext 
	RECT cr;    //für die Grösse des Clients 

	cr.right=900;
	cr.bottom=1000;
	//memdc.CreateCompatibleDC((CDC*)&amp;cdc); 
	memdc.CreateCompatibleDC(NULL); 

	//GetClientRect(&amp;cr); //Ausdehnung des Clientsbereichs ermitteln 
	//passende Bitmap in der Grösse des Clients anlegen 
	bmp.CreateCompatibleBitmap((CDC*)cdc, cr.right,cr.bottom);  

	//Speicherkontext mit der Bitmap verbinden 
	memdc.SelectObject(bmp); 
	memdc.BitBlt(0,0,cr.right,cr.bottom,(CDC*)cdc,0,0,SRCCOPY); 

	//Jetzt die Bitmap speichern 
	filename=saveFile.GetPathName();
	WriteBitmap(filename,bmp.operator HBITMAP(), memdc.m_hDC); 
   }

}
</code></pre>
<p>Das funktioniert jetzt ja auch alles soweit, nur das Problem ist jetzt eben, dass unter das Koordinatensystem auch noch Text soll, aber da ist die Taskleiste in meinem Bitmap zu sehen und darunter nur noch schwarz! Dort soll aber einfach nur ein weißer Bereich sein, in den ich noch mehr zeichnen bzw. schreiben kann.<br />
Ich hoff die ganze Erklärung ist einigermaßen verständlich geschrieben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/377830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/377830</guid><dc:creator><![CDATA[~Christian]]></dc:creator><pubDate>Thu, 23 Oct 2003 08:23:31 GMT</pubDate></item></channel></rss>