<?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[DibSection]]></title><description><![CDATA[<p>Ich habe ein leines problem (vermute ich).<br />
Ich habe nun den folgenden Code (Dank an geeky) und will pixel in einen dib zeichnen, schließlich soll das dib per bitblt angezeigt werden, aber ich sehe nix auf dem bildschirm ???</p>
<pre><code class="language-cpp">HBITMAP aBmp;            // Handle der DIB
BITMAPINFO bi;            // BITMAPINFO-Struktur
BITMAPINFOHEADER bmih;    // BITMAPINFOHEADER-Struktur
char *dibvalues;        // Zeiger auf die Pixeldaten

// Eigenschaften der zu erzeugenden DIB-Section setzen:
ZeroMemory(&amp;bmih,sizeof(BITMAPINFOHEADER));
bmih.biSize=sizeof(BITMAPINFOHEADER);
bmih.biHeight=-300;    // Höhe der Bitmap 480, negatives Vorzeichen: Oberstes linkes Pixel=erste Pixel in dibvalues
bmih.biWidth=300;    // Breite der Bitmap 640 Pixel
bmih.biPlanes=1;    // Ist irgendwie immer 1 ;D
bmih.biBitCount=32;    // Ein Pixel besteht aus 32 Bits (8 Bit rot, 8 Bit grün, 8 Bit blau, 8 Bit ungenutzt)
bmih.biCompression=BI_RGB;   // BI_RGB = nicht komprimiert

// BITMAPINFO-Struktur (wird von CreateDIBSection() benötigt)
// hat 2 Member, einen für die Palette, welche wir nicht benutzen und die BITMAPINFOHEADER-Struktur ist eingebettet:
bi.bmiHeader=bmih;

// Bei DIB_RGB_COLORS holt sich CreateDIBSection Paletteninfos auf dem hdc das wir übergeben, wir nehmen mal den hdc vom Desktop:
HDC hdc=GetDC(NULL);

// Das Ding hier erzeugt eine DIB-Section und liefert einen HBITMAP-Handle zurück.
// In dibvalues speichert die Funktionen einen Zeiger auf den Speicherbereich wo die Pixel rumliegen
aBmp=CreateDIBSection(hdc,&amp;bi,DIB_RGB_COLORS,(void**)&amp;dibvalues,NULL,NULL);

// Kurz aufräumen:
ReleaseDC(NULL,hdc);

// Hat das überhaupt geklappt?
if (aBmp==NULL)
{
    OutputDebugString(&quot;CreateDIBSection failed! \n&quot;);
    return 0;
}

// Jetzt können wir munter Pixel setzen,
// das hier entspricht quasi SetPixel()!
// hier als Beispiel an der Stelle (x/y)
// Ich bin mir nicht sicher aber ich glaube rot,grün,blau,ungenutzt entspricht nicht der hier stehende Reihenfolge
// einfach mal rumprobieren.
// Mit y*Breite*4+x*4 wird quasi die Position in dibvalues berechnet (hoffe ich)
// Warum *4 ? Ein Pixel hatte 32 Bit!
for (int j=0; j&lt;300; j++)
{
    for (int i=0; i&lt;300; i++)
    {
        dibvalues[j*bmih.biWidth*4+i*4+0] = GetRValue(buffer[i][j]);
        dibvalues[j*bmih.biWidth*4+i*4+0] = GetGValue(buffer[i][j]);
        dibvalues[j*bmih.biWidth*4+i*4+0] = GetBValue(buffer[i][j]);
    }
}

// ** Ab hier wird aBmp wie eine gewöhnliche Bitmap verwendet **

// Erzeugen wir mal nen temporären DC:
hdc=GetDC(NULL);
HDC temp_hdc=CreateCompatibleDC(hdc);

ReleaseDC(NULL,hdc);

// Selektieren da wie bei anderen Bitmaps auch die Bitmap rein:
HGDIOBJ OldObj=SelectObject(temp_hdc,aBmp);

// ...und blitten die aufs Ziel-DC:
BitBlt(hdc,0,0,300,300,temp_hdc,0,0,SRCCOPY);

// ...und natürlich aufräumen:
SelectObject(temp_hdc,OldObj);
DeleteObject(aBmp);
DeleteDC(temp_hdc);
</code></pre>
<p>Ich bekomme es einfach nicht hin und sehe auch keinen fehler...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205086/dibsection</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 16:56:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205086.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Feb 2008 12:29:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DibSection on Sun, 10 Feb 2008 12:29:27 GMT]]></title><description><![CDATA[<p>Ich habe ein leines problem (vermute ich).<br />
Ich habe nun den folgenden Code (Dank an geeky) und will pixel in einen dib zeichnen, schließlich soll das dib per bitblt angezeigt werden, aber ich sehe nix auf dem bildschirm ???</p>
<pre><code class="language-cpp">HBITMAP aBmp;            // Handle der DIB
BITMAPINFO bi;            // BITMAPINFO-Struktur
BITMAPINFOHEADER bmih;    // BITMAPINFOHEADER-Struktur
char *dibvalues;        // Zeiger auf die Pixeldaten

// Eigenschaften der zu erzeugenden DIB-Section setzen:
ZeroMemory(&amp;bmih,sizeof(BITMAPINFOHEADER));
bmih.biSize=sizeof(BITMAPINFOHEADER);
bmih.biHeight=-300;    // Höhe der Bitmap 480, negatives Vorzeichen: Oberstes linkes Pixel=erste Pixel in dibvalues
bmih.biWidth=300;    // Breite der Bitmap 640 Pixel
bmih.biPlanes=1;    // Ist irgendwie immer 1 ;D
bmih.biBitCount=32;    // Ein Pixel besteht aus 32 Bits (8 Bit rot, 8 Bit grün, 8 Bit blau, 8 Bit ungenutzt)
bmih.biCompression=BI_RGB;   // BI_RGB = nicht komprimiert

// BITMAPINFO-Struktur (wird von CreateDIBSection() benötigt)
// hat 2 Member, einen für die Palette, welche wir nicht benutzen und die BITMAPINFOHEADER-Struktur ist eingebettet:
bi.bmiHeader=bmih;

// Bei DIB_RGB_COLORS holt sich CreateDIBSection Paletteninfos auf dem hdc das wir übergeben, wir nehmen mal den hdc vom Desktop:
HDC hdc=GetDC(NULL);

// Das Ding hier erzeugt eine DIB-Section und liefert einen HBITMAP-Handle zurück.
// In dibvalues speichert die Funktionen einen Zeiger auf den Speicherbereich wo die Pixel rumliegen
aBmp=CreateDIBSection(hdc,&amp;bi,DIB_RGB_COLORS,(void**)&amp;dibvalues,NULL,NULL);

// Kurz aufräumen:
ReleaseDC(NULL,hdc);

// Hat das überhaupt geklappt?
if (aBmp==NULL)
{
    OutputDebugString(&quot;CreateDIBSection failed! \n&quot;);
    return 0;
}

// Jetzt können wir munter Pixel setzen,
// das hier entspricht quasi SetPixel()!
// hier als Beispiel an der Stelle (x/y)
// Ich bin mir nicht sicher aber ich glaube rot,grün,blau,ungenutzt entspricht nicht der hier stehende Reihenfolge
// einfach mal rumprobieren.
// Mit y*Breite*4+x*4 wird quasi die Position in dibvalues berechnet (hoffe ich)
// Warum *4 ? Ein Pixel hatte 32 Bit!
for (int j=0; j&lt;300; j++)
{
    for (int i=0; i&lt;300; i++)
    {
        dibvalues[j*bmih.biWidth*4+i*4+0] = GetRValue(buffer[i][j]);
        dibvalues[j*bmih.biWidth*4+i*4+0] = GetGValue(buffer[i][j]);
        dibvalues[j*bmih.biWidth*4+i*4+0] = GetBValue(buffer[i][j]);
    }
}

// ** Ab hier wird aBmp wie eine gewöhnliche Bitmap verwendet **

// Erzeugen wir mal nen temporären DC:
hdc=GetDC(NULL);
HDC temp_hdc=CreateCompatibleDC(hdc);

ReleaseDC(NULL,hdc);

// Selektieren da wie bei anderen Bitmaps auch die Bitmap rein:
HGDIOBJ OldObj=SelectObject(temp_hdc,aBmp);

// ...und blitten die aufs Ziel-DC:
BitBlt(hdc,0,0,300,300,temp_hdc,0,0,SRCCOPY);

// ...und natürlich aufräumen:
SelectObject(temp_hdc,OldObj);
DeleteObject(aBmp);
DeleteDC(temp_hdc);
</code></pre>
<p>Ich bekomme es einfach nicht hin und sehe auch keinen fehler...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1452964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1452964</guid><dc:creator><![CDATA[Showball]]></dc:creator><pubDate>Sun, 10 Feb 2008 12:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to DibSection on Sun, 10 Feb 2008 16:19:47 GMT]]></title><description><![CDATA[<p>Sieht wohl so aus als ob es unmöglich ist <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453143</guid><dc:creator><![CDATA[Showball]]></dc:creator><pubDate>Sun, 10 Feb 2008 16:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to DibSection on Sun, 10 Feb 2008 18:35:23 GMT]]></title><description><![CDATA[<p>Hab die lösung gefunden <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="😃"
    /></p>
<p>(ich idiot)</p>
<p>Ich habe die hdc releast, und anschlieend werte eingetragen ... und man wundert dich das nix angezeigt wird xD</p>
<p>habe einfach</p>
<p>ReleaseDC(NULL,hdc);</p>
<p>rausgehauen!</p>
<p>^^</p>
<p>EDIT:</p>
<p>Lol habe nen wenig getestet und es funktioniert wunderbar ...<br />
ist sogar schneller als mit direktDraw ein 800x600 großes bild an zu zeigen <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="😃"
    /></p>
<p>kein flackern, kein bildaufbau nix, hervorragend!</p>
<p>habe nun aber ein kleines problem, aber das poste ich gleich!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453223</guid><dc:creator><![CDATA[Showball]]></dc:creator><pubDate>Sun, 10 Feb 2008 18:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to DibSection on Sun, 10 Feb 2008 18:44:14 GMT]]></title><description><![CDATA[<p>Ok nun zu meinem neuen problehm:</p>
<p>Komischerweise zeichnet der auf meinem desktop und nicht auf mein programm window...</p>
<p>warum?</p>
<p>EDIT:</p>
<p>SRY gerade gelöst^^</p>
<p>habe nen zewiten hdc erstellt, nmens hdc2, das für die paintstruct benutzt und für das blitten, und invalidaterect auf false gesetzt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1453240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453240</guid><dc:creator><![CDATA[Showball]]></dc:creator><pubDate>Sun, 10 Feb 2008 18:44:14 GMT</pubDate></item><item><title><![CDATA[Reply to DibSection on Sun, 10 Feb 2008 19:16:35 GMT]]></title><description><![CDATA[<p>neue frage ^^</p>
<p>giebt es irgent wie ne schnellere methode als Bitblt?</p>
<p>Also, ich meine möglichst schnell aufm bilschirm zu bringen?</p>
<p>OK ich frage mal anders:</p>
<p>Was ist nun schneller:</p>
<p>- ich zeichne per BitBlt direkt auf mein fenster dc</p>
<p>oder</p>
<p>- ich packe erst alles in einen temprären dc, und kopiere bloß den temporeren dc auf mein fenster dc?</p>
<p>Bei welcher möglichkeit ist der bildaufbau schneller?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1453264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1453264</guid><dc:creator><![CDATA[Showball]]></dc:creator><pubDate>Sun, 10 Feb 2008 19:16:35 GMT</pubDate></item></channel></rss>