<?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[Warum ist SetPixel(); so langsam?&#96;]]></title><description><![CDATA[<p>Hi, ich wollte mir ein Gradient Rect zeichnen lassen, indem ich mir 2 for-Schleifen erstelle und dann die Pixel mit den RGB Werten zeichne. Das Problem ist nur, dass er bei einer Breite von 256 x 256 Pixeln total langsam wird. Liegt es daran, weil die Funktion zu oft aufgerufen wird? Wie wird dann bitte Rectangle(); realisiert, dort werden ja auch Pixel gezeichnet. Weiß jemand, wie ich Rechtecke mit dem Gradient Rect Effekt benutzen kann, ohne die vorgefertigte GradientRect(); Funktion zu benutzen? Das liegt daran, weil ich mir z.B. auch Farbübergänge bei Linien und Kreisen benutzen möchte. Wie machen es dann die von der SDL, Allegro und DirectX solche Farbübergänge zu erzielen?</p>
<p>-meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216078/warum-ist-setpixel-so-langsam</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 18:09:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216078.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jun 2008 20:14:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum ist SetPixel(); so langsam?&#96; on Wed, 18 Jun 2008 20:14:58 GMT]]></title><description><![CDATA[<p>Hi, ich wollte mir ein Gradient Rect zeichnen lassen, indem ich mir 2 for-Schleifen erstelle und dann die Pixel mit den RGB Werten zeichne. Das Problem ist nur, dass er bei einer Breite von 256 x 256 Pixeln total langsam wird. Liegt es daran, weil die Funktion zu oft aufgerufen wird? Wie wird dann bitte Rectangle(); realisiert, dort werden ja auch Pixel gezeichnet. Weiß jemand, wie ich Rechtecke mit dem Gradient Rect Effekt benutzen kann, ohne die vorgefertigte GradientRect(); Funktion zu benutzen? Das liegt daran, weil ich mir z.B. auch Farbübergänge bei Linien und Kreisen benutzen möchte. Wie machen es dann die von der SDL, Allegro und DirectX solche Farbübergänge zu erzielen?</p>
<p>-meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531863</guid><dc:creator><![CDATA[meep]]></dc:creator><pubDate>Wed, 18 Jun 2008 20:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist SetPixel(); so langsam?&#96; on Wed, 18 Jun 2008 20:24:47 GMT]]></title><description><![CDATA[<p>Es ist einfach mit verdammt viel Verwaltungsaufwand verbunden, etwas im Grafikspeicher zu verändern. Und der Aufwand bleibt fast immer gleich, egal ob du 1 Pixel oder 100 umänderst.</p>
<p>Stell dir vor, deine Sparkasse will jedesmal 80 Cent von dir, wenn du Geld überweisen möchtest. Dann ist das natürlich ok, wenn du mal 100€ auf einmal überweisen willst. Aber wenn du 100x einen Euro überweist, dann wirst du bald arm.</p>
<p>Deshalb bearbeitet man auch die Grafik möglichst im Arbeitsspeicher und kopiert sie dann in einem Rutsch. Z.B mit BitBlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531866</guid><dc:creator><![CDATA[GNU-Fan]]></dc:creator><pubDate>Wed, 18 Jun 2008 20:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist SetPixel(); so langsam?&#96; on Wed, 18 Jun 2008 20:29:26 GMT]]></title><description><![CDATA[<p>Ja so habe ich mir das beinahe gedacht aber wie genau löse ich das mit der BitBlt Funktion? Damit habe ich bisher nur Bitmaps gezeichnet.</p>
<p>-meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531870</guid><dc:creator><![CDATA[meep]]></dc:creator><pubDate>Wed, 18 Jun 2008 20:29:26 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist SetPixel(); so langsam?&#96; on Wed, 18 Jun 2008 21:29:28 GMT]]></title><description><![CDATA[<p>Wenn du sowieso ein komplettes Rechteck auf den Schirm malen willst kannst du SetDIBitsToDevice verwenden.</p>
<p>Dazu &quot;malst&quot; du deine Pixel in ein normales Array im Speicher (DWORD Array, ein DWORD = 1 Pixel). Dann füllst du ne BITMAPINFO Struktur aus die das 32 Bit BGRA Format beschreibt, und rufst SetDIBitsToDevice auf.</p>
<pre><code class="language-cpp">void foo()
{
    DWORD pixels[256*256];

    // pixels anfüllen

    HDC dc = ...; // woher auch immer

    // BITMAPINFO ausfüllen
    BITMAPINFO bi = {0};
    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bi.bmiHeader.biWidth = 256;
    bi.bmiHeader.biHeight = 256;
    bi.bmiHeader.biPlanes = 1;
    bi.bmiHeader.biBitCount = 32;
    bi.bmiHeader.biCompression = BI_RGB;

    // auf den Bildschirm kopieren
    SetDIBitsToDevice(
        dc,
        destX,
        destY,
        256, // width
        256, // height
        0, // source X
        0, // source Y
        0,
        256,
        pixels,
        &amp;bi,
        0
    );
}
</code></pre>
<p>Hab jetzt nicht versucht das zu compilieren, aber grundsätzlich geht das so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531890</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 18 Jun 2008 21:29:28 GMT</pubDate></item></channel></rss>