<?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[WinAPI unter C: Bitmap]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hänge nun fast drei Tage vor einem Problem und mir gehen bald die Haare aus deswegen. Ich habe RGB Werte aus einem PPM ausgelesen und einen Pointer (*bild) auf diese Werte. Da die Farbinformationen (3 Byte /Pixel) in Reihenfolge RGB liegen, habe ich eine Funktion geschrieben, die mit das ganze in die Reihenfolge GRB für Bitmaps bringt.</p>
<p>Die BITMAPINFO habe ich ebenfalls erstellt:</p>
<pre><code>BITMAPINFO bi;
               BITMAPINFOHEADER bmih;
               ZeroMemory(&amp;bmih,sizeof(BITMAPINFOHEADER));
               bmih.biSize=sizeof(BITMAPINFOHEADER);
               bmih.biHeight=(long)pic_height;
               bmih.biWidth=(long)pic_width;
               bmih.biPlanes=1;
               bmih.biBitCount=24*sizeof(byte);
               bmih.biCompression=BI_RGB;
               bmih.biSizeImage = bmih.biWidth * bmih.biHeight * 3 * bmih.biBitCount;
               bmih.biXPelsPerMeter = 0;
               bmih.biYPelsPerMeter = 0;
               bmih.biClrImportant = 0; 
               bi.bmiHeader = bmih;
</code></pre>
<p>Schreibe ich das ganze nun in eine Datei mit</p>
<pre><code>FILE *bmpFile = fopen(&quot;test.bmp&quot;, &quot;w+&quot;);  // open file
               if(bmpFile){
                   // write Bitmapfile
                   fwrite(&amp;bmfh, sizeof(BITMAPFILEHEADER), 1, bmpFile);
                   fwrite(&amp;bmih, sizeof(BITMAPINFO), 1, bmpFile);
                   fwrite(bild, pic_width*pic_height*3, 1, bmpFile);
                   }
               fclose(bmpFile); // close file
</code></pre>
<p>erhalte ich ein bmp, das Windows problemlos liest.</p>
<p>BITMAPFILEHEADER:</p>
<pre><code>BITMAPFILEHEADER bmfh;
               bmfh.bfType       = 19778; // must be BM (or 19778 ASCII)
               bmfh.bfSize       = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + pic_width*pic_height*3;
               bmfh.bfReserved1  = 0;
               bmfh.bfReserved2  = 0;
               bmfh.bfOffBits    = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
</code></pre>
<p>Will ich die Datei nun mittels<br />
hBitmap=(HBITMAP)LoadImage(NULL,&quot;pfad/test.bmp&quot;,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);<br />
laden, bekomme ich einen Fehler angezeigt. GetLastError ergibt: 4207216</p>
<p>Hat vielleicht jemand eine Idee, was ich falsch mache?</p>
<p>Des Weiteren würde ich gerne die Folge der GRB-Werte in einen BRUSH einlesen, jedoch weigert sich CreatePatternBrush dagegen.</p>
<p>Ich habe nun wirklich drei geschlagene Tage darüber gebrütet und hoffe, daß mir jemand von euch weiterhelfen kann.</p>
<p>Besten Dank schonmal,<br />
Tscherno</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141827/winapi-unter-c-bitmap</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:27:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141827.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 25 Mar 2006 12:58:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WinAPI unter C: Bitmap on Sat, 25 Mar 2006 12:58:48 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hänge nun fast drei Tage vor einem Problem und mir gehen bald die Haare aus deswegen. Ich habe RGB Werte aus einem PPM ausgelesen und einen Pointer (*bild) auf diese Werte. Da die Farbinformationen (3 Byte /Pixel) in Reihenfolge RGB liegen, habe ich eine Funktion geschrieben, die mit das ganze in die Reihenfolge GRB für Bitmaps bringt.</p>
<p>Die BITMAPINFO habe ich ebenfalls erstellt:</p>
<pre><code>BITMAPINFO bi;
               BITMAPINFOHEADER bmih;
               ZeroMemory(&amp;bmih,sizeof(BITMAPINFOHEADER));
               bmih.biSize=sizeof(BITMAPINFOHEADER);
               bmih.biHeight=(long)pic_height;
               bmih.biWidth=(long)pic_width;
               bmih.biPlanes=1;
               bmih.biBitCount=24*sizeof(byte);
               bmih.biCompression=BI_RGB;
               bmih.biSizeImage = bmih.biWidth * bmih.biHeight * 3 * bmih.biBitCount;
               bmih.biXPelsPerMeter = 0;
               bmih.biYPelsPerMeter = 0;
               bmih.biClrImportant = 0; 
               bi.bmiHeader = bmih;
</code></pre>
<p>Schreibe ich das ganze nun in eine Datei mit</p>
<pre><code>FILE *bmpFile = fopen(&quot;test.bmp&quot;, &quot;w+&quot;);  // open file
               if(bmpFile){
                   // write Bitmapfile
                   fwrite(&amp;bmfh, sizeof(BITMAPFILEHEADER), 1, bmpFile);
                   fwrite(&amp;bmih, sizeof(BITMAPINFO), 1, bmpFile);
                   fwrite(bild, pic_width*pic_height*3, 1, bmpFile);
                   }
               fclose(bmpFile); // close file
</code></pre>
<p>erhalte ich ein bmp, das Windows problemlos liest.</p>
<p>BITMAPFILEHEADER:</p>
<pre><code>BITMAPFILEHEADER bmfh;
               bmfh.bfType       = 19778; // must be BM (or 19778 ASCII)
               bmfh.bfSize       = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + pic_width*pic_height*3;
               bmfh.bfReserved1  = 0;
               bmfh.bfReserved2  = 0;
               bmfh.bfOffBits    = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
</code></pre>
<p>Will ich die Datei nun mittels<br />
hBitmap=(HBITMAP)LoadImage(NULL,&quot;pfad/test.bmp&quot;,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);<br />
laden, bekomme ich einen Fehler angezeigt. GetLastError ergibt: 4207216</p>
<p>Hat vielleicht jemand eine Idee, was ich falsch mache?</p>
<p>Des Weiteren würde ich gerne die Folge der GRB-Werte in einen BRUSH einlesen, jedoch weigert sich CreatePatternBrush dagegen.</p>
<p>Ich habe nun wirklich drei geschlagene Tage darüber gebrütet und hoffe, daß mir jemand von euch weiterhelfen kann.</p>
<p>Besten Dank schonmal,<br />
Tscherno</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023681</guid><dc:creator><![CDATA[Tscherno_Bill]]></dc:creator><pubDate>Sat, 25 Mar 2006 12:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to WinAPI unter C: Bitmap on Fri, 31 Mar 2006 10:28:05 GMT]]></title><description><![CDATA[<p>Nach einer weiteren Woche des Grübelns und Haareraufens habe ich es nun geschafft, daß das eingelesene Bild nun im gewünschten Fenster angezeigt wird. Das ganze habe ich gelöst, indem ich ein</p>
<p>RGBTRIPLE Bild[width * height]</p>
<p>erstellt habe und dieses Array mit den RGB Werten gefüttert habe. Anschließend wird der BITMAPINFOHEADER dem Bild entsprechend generiert und mit CreateDIBitmap ein HBITMAP erstellt, um dieses dann mit StretchDIBits an das Fenster zu schicken.</p>
<p>Das nur zur Information <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>Nun stehe ich bei großen Bilder vor dem Problem, daß das Array zu groß wird. Ein 512x512 Bild wird problemlos dargestellt, ein 1024x1024 Bild bringt das Programm jedoch zum Absturz.</p>
<p>Hat jemand einen Tip, wie ich das Problem lösen kann?</p>
<p>Grüße,<br />
Tscherno</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027830</guid><dc:creator><![CDATA[Tscherno_Bill]]></dc:creator><pubDate>Fri, 31 Mar 2006 10:28:05 GMT</pubDate></item></channel></rss>