<?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[CDC: Doppelpufferung und Stretch&#x2F;BitBlt verwenden]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte zu Testzwecken ein eine Bitmap in einen Puffer stretchen und dann aus dem Puffer mit BitBlt einen Ausschnitt in ein Fenster kopieren.</p>
<p>Das laden der Bitmap ist klar, nur wie geht der Rest?<br />
Aber bitte: Ich MUSS die Bitmap erst in einen Puffer stretchen und dann kann ich erst einen Ausschnitt in das Fenster malen.</p>
<p>Dank schonmal für eure Mühe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/52148/cdc-doppelpufferung-und-stretch-bitblt-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 19:40:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/52148.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Oct 2003 18:47:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CDC: Doppelpufferung und Stretch&#x2F;BitBlt verwenden on Thu, 16 Oct 2003 18:47:00 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte zu Testzwecken ein eine Bitmap in einen Puffer stretchen und dann aus dem Puffer mit BitBlt einen Ausschnitt in ein Fenster kopieren.</p>
<p>Das laden der Bitmap ist klar, nur wie geht der Rest?<br />
Aber bitte: Ich MUSS die Bitmap erst in einen Puffer stretchen und dann kann ich erst einen Ausschnitt in das Fenster malen.</p>
<p>Dank schonmal für eure Mühe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/373956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/373956</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Thu, 16 Oct 2003 18:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to CDC: Doppelpufferung und Stretch&#x2F;BitBlt verwenden on Thu, 16 Oct 2003 19:04:24 GMT]]></title><description><![CDATA[<p>zunächst einmal erzeugst du dir mittels createcompatibledc zwei memory dcs.<br />
selektiere die bitmap mittels SelectObject) in den ersten dc. in den zweiten<br />
musst du auch eine selektieren, da du mit diesem ansonsten nicht arbeiten kannst.<br />
dann machst du deinen stretchblt vom ersten in den zweiten memory dc und kopierst den ausschnit von dort aus mittels bitblt auf den screen.<br />
ich gehe davon aus, dass du bereits ein bitmaphandle hast ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/373966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/373966</guid><dc:creator><![CDATA[Wonko]]></dc:creator><pubDate>Thu, 16 Oct 2003 19:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to CDC: Doppelpufferung und Stretch&#x2F;BitBlt verwenden on Thu, 16 Oct 2003 19:19:27 GMT]]></title><description><![CDATA[<p>Danke für deine schnelle Antwort.<br />
So in etwa habe ich das auch gemacht.</p>
<pre><code>void DrawBitmap(CPaintDC *hdc, CBitmap *Bitmap, int xStart, 
   int yStart, int br, int ho, BOOL stretch, int cx, int cy)
{
  BITMAP bm;  //eine Bitmap-Info Struktur

  // Speicherkontexte
  CDC *dcmem=new CDC;
  CDC *dc=new CDC;

  //Informationen über die übergebene Bitmap auslesen
  Bitmap-&gt;GetObject( sizeof(BITMAP), (LPVOID)&amp;bm); //in BM sichern

  dcmem-&gt;CreateCompatibleDC(hdc);
  dcmem-&gt;SelectObject( Bitmap);  //Bitmap selektieren
  dcmem-&gt;SetMapMode( hdc-&gt;GetMapMode()); //selbes Mapping wie in der Basis einstellen

  // BitMap mit stretch in neuen Context
  dc-&gt;CreateCompatibleDC(dcmem);
  dc-&gt;SelectObject( dcmem );  //selektieren
  dc-&gt;SetStretchBltMode(HALFTONE);
  dc-&gt;StretchBlt(0,0,br,ho,dcmem,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);

  hdc-&gt;SelectObject(dc);

  // Begrenzt auf Control Groesse (cx,cy)
  hdc-&gt;BitBlt(0,0,br,ho,dc,0,0,cx, cy,SRCCOPY);

  dc-&gt;DeleteDC();
  dcmem-&gt;DeleteDC();
  delete dc;
  delete dcmem;
}
</code></pre>
<p>Leider liefert StretchBlt immer 0 als Ergebnis, irgendwas ist da falsch.<br />
Kann Du mir da weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/373978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/373978</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Thu, 16 Oct 2003 19:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to CDC: Doppelpufferung und Stretch&#x2F;BitBlt verwenden on Thu, 16 Oct 2003 19:22:20 GMT]]></title><description><![CDATA[<p>ups Parameterfehler beim letzten BitBlt (copy &amp; paste error), ist aber nicht der Grund der Sache ansich....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/373981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/373981</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Thu, 16 Oct 2003 19:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to CDC: Doppelpufferung und Stretch&#x2F;BitBlt verwenden on Thu, 16 Oct 2003 20:31:10 GMT]]></title><description><![CDATA[<p>Ein BitBlt oder StretchBlt geht immer nur in einen &quot;echten&quot; DC oder in eine kompatible Bitmap. Es muss also eine solche verwendet werden um den Stretch zu machen. Von der BMP kann man dann einen beliebeigen Auschnitt ins HDC kopieren.</p>
<p>Hier mal mein Code</p>
<pre><code>/*
Einen Bitmapausschnitt in ein CPaintDC beliebig gestretcht/gestaucht zeichnen.
hdc=Ausgabegerät
Bitmap=eine geladene Bitmap
xStart/yStart=x/y-Koordinate der Ausgabe im Ziel
br,ho=Breite/Höhe in die die Bitmap gestrecht/gestaucht wird
int cx, cy=Größe des Ausgabegerätes
*/
void DrawBitmap(CPaintDC *hdc, CBitmap *Bitmap, int xStart, 
				int yStart, int br, int ho, BOOL stretch, int cx, int cy)
{

  BITMAP bm;  //eine Bitmap-Info Struktur 

  // Speicherkontexte 
  CDC *dcmem=new CDC;         //Speicherkontext für 
  CDC *dc=new CDC(); 
  CBitmap *bmp=new CBitmap;

  //Informationen über die übergebene Bitmap auslesen 
  Bitmap-&gt;GetObject( sizeof(BITMAP), (LPVOID)&amp;bm); //in BM sichern 

  dcmem-&gt;CreateCompatibleDC(hdc); 
  dcmem-&gt;SelectObject( Bitmap);  //Bitmap selektieren 
  dcmem-&gt;SetMapMode( hdc-&gt;GetMapMode()); //selbes Mapping wie in der Basis einstellen 

  // BitMap mit stretch in neuen Context 
  bmp-&gt;CreateCompatibleBitmap(dcmem,ho,br);

  dc-&gt;CreateCompatibleDC(hdc); 
  dc-&gt;SelectObject( bmp );  //selektieren 
  dc-&gt;SetStretchBltMode(HALFTONE); 
  dc-&gt;StretchBlt(0,0,ho,br, dcmem,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY); 

  hdc-&gt;SelectObject(dc); 

  // Begrenzt auf Control Groesse (cx,cy) 
  hdc-&gt;BitBlt(0,0,cx,cy,dc,0,0,SRCCOPY); 

  dc-&gt;DeleteDC(); 
  dcmem-&gt;DeleteDC(); 
  delete dc; 
  delete dcmem; 
  delete bmp;
}
</code></pre>
<p>Funktioniert recht gut bei mir, kann aber sicher noch verbessert werden...<br />
Hab dank und Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/374031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/374031</guid><dc:creator><![CDATA[CodeFlatter]]></dc:creator><pubDate>Thu, 16 Oct 2003 20:31:10 GMT</pubDate></item></channel></rss>