<?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[Pixel aus einer Bitmap auslesen]]></title><description><![CDATA[<p>Hallo, ich möchte die einzelnen Pixel aus einem zu ladenden *.bmp auslesen.</p>
<p>Ich habe mir auch schon was zusammengebsatelt, was leider nicht so recht funktioniert.</p>
<pre><code class="language-cpp">HBITMAP   hBitMap;
		hBitMap = (HBITMAP)LoadImage(0,L&quot;1.bmp&quot;,IMAGE_BITMAP, 0, 0, 
			LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);  

		BITMAP *bitmap;
		GetObject(hBitMap, sizeof(BITMAP), &amp;bitmap);

		long groesse =(bitmap-&gt;bmBitsPixel/8) * bitmap-&gt;bmWidth * bitmap-&gt;bmHeight; 

		BYTE* byte = new BYTE[groesse];
		GetBitmapBits( hBitMap, groesse,  byte) ;
</code></pre>
<p>Das Programm stürzt in der Zeile</p>
<pre><code class="language-cpp">long groesse =(bitmap-&gt;bmBitsPixel/8) * bitmap-&gt;bmWidth * bitmap-&gt;bmHeight;
</code></pre>
<p>mit den Debuggerinformationen kann ich nicht alzuviel anfangen:</p>
<p>+ &amp;bitmap 0x0012f9c0 tagBITMAP * *<br />
+ *bitmap {bmType=??? bmWidth=??? bmHeight=??? ...} tagBITMAP<br />
+ bitmap 0xffffffff {bmType=??? bmWidth=??? bmHeight=??? ...} tagBITMAP *</p>
<p>Was muß ich anders machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188553/pixel-aus-einer-bitmap-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 13:22:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188553.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 16:41:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 16:41:39 GMT]]></title><description><![CDATA[<p>Hallo, ich möchte die einzelnen Pixel aus einem zu ladenden *.bmp auslesen.</p>
<p>Ich habe mir auch schon was zusammengebsatelt, was leider nicht so recht funktioniert.</p>
<pre><code class="language-cpp">HBITMAP   hBitMap;
		hBitMap = (HBITMAP)LoadImage(0,L&quot;1.bmp&quot;,IMAGE_BITMAP, 0, 0, 
			LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);  

		BITMAP *bitmap;
		GetObject(hBitMap, sizeof(BITMAP), &amp;bitmap);

		long groesse =(bitmap-&gt;bmBitsPixel/8) * bitmap-&gt;bmWidth * bitmap-&gt;bmHeight; 

		BYTE* byte = new BYTE[groesse];
		GetBitmapBits( hBitMap, groesse,  byte) ;
</code></pre>
<p>Das Programm stürzt in der Zeile</p>
<pre><code class="language-cpp">long groesse =(bitmap-&gt;bmBitsPixel/8) * bitmap-&gt;bmWidth * bitmap-&gt;bmHeight;
</code></pre>
<p>mit den Debuggerinformationen kann ich nicht alzuviel anfangen:</p>
<p>+ &amp;bitmap 0x0012f9c0 tagBITMAP * *<br />
+ *bitmap {bmType=??? bmWidth=??? bmHeight=??? ...} tagBITMAP<br />
+ bitmap 0xffffffff {bmType=??? bmWidth=??? bmHeight=??? ...} tagBITMAP *</p>
<p>Was muß ich anders machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336713</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 01 Aug 2007 16:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 16:53:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">BITMAP *bitmap;
</code></pre>
<p>Diese Variable initialisierst Du nicht und greifst somit auf einen ungültigen Zeiger zu. Du brauchst hier keinen Pointer, sondern einfach eine lokale Variable der Struktur 'BITMAP'; deren Adresse wird dann via Adressoperator (&amp;) an GetObject übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336724</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Wed, 01 Aug 2007 16:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 17:28:23 GMT]]></title><description><![CDATA[<p>Hallo, ich habs jetzt so:</p>
<pre><code class="language-cpp">HBITMAP hBitMap;
		hBitMap=NULL;

		hBitMap = (HBITMAP)LoadImage( NULL, L&quot;1.bmp&quot;, IMAGE_BITMAP, 0, 0,
               LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

		BITMAP bitmap;
		GetObject(&amp;hBitMap, sizeof(BITMAP), &amp;bitmap);

		long groesse =(bitmap.bmBitsPixel/8) * bitmap.bmWidth * bitmap.bmHeight; 

		BYTE byte ;
		GetBitmapBits( hBitMap, groesse,  &amp;byte) ;

		cout &lt;&lt; bitmap.bmWidth &lt;&lt; &quot;\n&quot;;
		cout &lt;&lt; bitmap.bmHeight &lt;&lt; &quot;\n&quot;;
		int x;
		cin &gt;&gt;x;
		return true;
</code></pre>
<p>ich habe ein 128*128 Bitmap in diesem Ordner welches 1.bmp heißt. allerdings erhallte ich jetzt als Ausgabe</p>
<blockquote>
<p>4199396<br />
4206624</p>
</blockquote>
<p>Das ist ja nen bils zu viel <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>Ist also sonst noch was falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336738</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 01 Aug 2007 17:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 18:03:23 GMT]]></title><description><![CDATA[<p>Ich glaube CodeFinder hat unrecht.</p>
<p>Versuch es mal so:</p>
<pre><code class="language-cpp">int main() {

	HBITMAP *phBitmap;
	phBitmap= new HBITMAP;

	BITMAP  bm;
   *phBitmap = NULL;

   *phBitmap = (HBITMAP)LoadImage( NULL, L&quot;1.bmp&quot;, IMAGE_BITMAP, 0, 0,
               LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
   if( *phBitmap == NULL )
   return FALSE;

   GetObject(*phBitmap, sizeof(BITMAP), &amp;bm );
   cout &lt;&lt; bm.bmHeight&lt;&lt; &quot;\n&quot;;

   int x; 
   cin &gt;&gt;x; 
   return true;

}
</code></pre>
<p>Ich habe das auch nur durch rumprobieren rausgefunden.</p>
<p>Was ich selbst nicht verstehe ist, warum man erst</p>
<pre><code class="language-cpp">HBITMAP *phBitmap;
</code></pre>
<p>und dann</p>
<pre><code class="language-cpp">*phBitmap = NULL;
</code></pre>
<p>schreibt.</p>
<p>Lässt man das erste davon weg funktioniert es nicht, obwohl man den Zeiger dann auf NULL setzen kann <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/1336766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336766</guid><dc:creator><![CDATA[Andreas XXL]]></dc:creator><pubDate>Wed, 01 Aug 2007 18:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 18:09:26 GMT]]></title><description><![CDATA[<p>LoadImage() gibt immer ein Handle zurück, nix mit Pointern?!</p>
<p>Meine Vermutung:<br />
LR_CREATEDIBSECTION sorgt dafür das eine DIB erzeugt wird, demnach befüllt GetObject() keine BITMAP sondern ein DIBSECTION und wird vermutlich 0 zurückliefern weil es eine BITMAP statt DIBSECTION vorgeworfen bekommt.<br />
Prüf also mal den Rückgabewerte von GetObject()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336768</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Wed, 01 Aug 2007 18:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 18:09:39 GMT]]></title><description><![CDATA[<p>Der erste Parameter von GetObject () ist der Wert einer Variablen und <em>nicht</em> seine Adresse :</p>
<pre><code class="language-cpp">// GetObject(&amp;hBitMap, sizeof(BITMAP), &amp;bitmap);
GetObject( hBitMap, sizeof(BITMAP), &amp;bitmap);
</code></pre>
<p>CodeFinder's Vorschlag ist völlig in Ordnung.<br />
<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/1336769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336769</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 01 Aug 2007 18:09:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 18:24:39 GMT]]></title><description><![CDATA[<p>Danke soweit.</p>
<p>Der Code von Codefinder funzt leider nicht</p>
<p>Der Code von Andreas XXL funzt</p>
<p>Zumindest soweit, dass jetzt in bm.bmHeight der richtige Wert steht.</p>
<p>Ich hbe es jetzt so:</p>
<pre><code class="language-cpp">HBITMAP *phBitmap;
	phBitmap= new HBITMAP;

	BITMAP  bm;
   *phBitmap = NULL;

   *phBitmap = (HBITMAP)LoadImage( NULL, L&quot;1.bmp&quot;, IMAGE_BITMAP, 0, 0,
               LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
   if( *phBitmap == NULL )
   return FALSE;

   GetObject(*phBitmap, sizeof(BITMAP), &amp;bm );

		long groesse =(bm.bmBitsPixel/8) * bm.bmWidth * bm.bmHeight; 

		BYTE byte ;
		GetBitmapBits(*phBitmap, groesse,  &amp;byte) ;

		cout &lt;&lt; byte; 

		int x;
		cin &gt;&gt; x;
</code></pre>
<p>Allerdings bekomme ich jetzt als Ausgabe nen komisches Zeichen.<br />
Wie komme ich an die ganzen Werte in Byte?</p>
<p>Oder muß ich als Byte nen Arry der groesse &quot;groesse&quot; angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336778</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 01 Aug 2007 18:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 18:43:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12048">@CodeFinder</a><br />
@merker<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/41">@geeky</a></p>
<p>Hier ist es auch so gemacht wie in meiner Version.<br />
<a href="http://support.microsoft.com/kb/158898/de" rel="nofollow">http://support.microsoft.com/kb/158898/de</a><br />
Die andere funktioniert wirklich nicht, nur Bill Gates weiß warum <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1336786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336786</guid><dc:creator><![CDATA[Andreas XXL]]></dc:creator><pubDate>Wed, 01 Aug 2007 18:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 19:10:03 GMT]]></title><description><![CDATA[<p>Sorry, falscher Post -- gelöscht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336797</guid><dc:creator><![CDATA[Andreas XXL]]></dc:creator><pubDate>Wed, 01 Aug 2007 19:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 19:08:18 GMT]]></title><description><![CDATA[<p>Alle haben recht.</p>
<p>Die Version von Codefinder läuft tatsächlich nicht mit Visual c++ 6.0,<br />
mit dem neuen Visual c++ Express schon. (Sehr komisch)</p>
<p>Mit dem neuen Visual c++ laufen beide Versionen. Ich nehme jetzt die von<br />
CodeFinder.</p>
<p>Es sieht also so aus:</p>
<pre><code class="language-cpp">int main() {

HBITMAP phBitmap;

BITMAP  bm;

   phBitmap = (HBITMAP)LoadImage( NULL, L&quot;1.bmp&quot;, IMAGE_BITMAP, 0, 0,
               LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

		GetObject(phBitmap, sizeof(BITMAP), &amp;bm );

		long groesse =(bm.bmBitsPixel/8) * bm.bmWidth * bm.bmHeight; 
		BYTE *pBuffer = new BYTE[bm.bmWidthBytes * bm.bmHeight];
		GetBitmapBits(phBitmap,bm.bmWidthBytes * bm.bmHeight,  &amp;pBuffer) ;

		cout &lt;&lt; bm.bmBitsPixel &lt;&lt; &quot;\n&quot; ;
		cout &lt;&lt; bm.bmWidth  &lt;&lt; &quot;\n&quot;;
		cout &lt;&lt; bm.bmHeight &lt;&lt; &quot;\n&quot;;

		int x;
		cin &gt;&gt;x;

		for (int i=0; i&lt; bm.bmWidthBytes * bm.bmHeight; i++) {
			cout  &lt;&lt; pBuffer[i] &lt;&lt; &quot;\n&quot;;
		}

		cin &gt;&gt;x;
		return true;

}
</code></pre>
<p>Als Ausgabe erhalte ich<br />
24<br />
512<br />
512</p>
<p>(Das scheint zu stimmen)</p>
<p>Und dann nur noch</p>
<h1>=</h1>
<h1>=</h1>
<p>=<br />
...</p>
<p>Was ist noch falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336799</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 01 Aug 2007 19:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Pixel aus einer Bitmap auslesen on Wed, 01 Aug 2007 20:38:45 GMT]]></title><description><![CDATA[<p>GetBitmapBits erwartet als 3. Parameter einen Zeiger auf einen Puffer. Du übergibst aber die Adresse des Pufferzeigers.</p>
<p>So sollte es aussehen:</p>
<pre><code class="language-cpp">GetBitmapBits(phBitmap,bm.bmWidthBytes * bm.bmHeight,  pBuffer);
</code></pre>
<p>Auch solltest du folgendes ändern:</p>
<pre><code class="language-cpp">// alt:
// cout  &lt;&lt; pBuffer[i] &lt;&lt; &quot;\n&quot;;
// neu (nach int casten):
cout  &lt;&lt; (int)pBuffer[i] &lt;&lt; endl;
</code></pre>
<p>sonst werden nur Zeichen für die Werte dargestellt.</p>
<p>Und zum guten Schluß - wo wird der Speicher mit delete wieder freigegeben???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336853</guid><dc:creator><![CDATA[Analog Bit]]></dc:creator><pubDate>Wed, 01 Aug 2007 20:38:45 GMT</pubDate></item></channel></rss>