<?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[[C++] Bitmap Lade&#x2F;Speicherroutine]]></title><description><![CDATA[<p>Ich möchte mir eine Bitmap Lade/Speicherroutine schreiben.<br />
Nur ich weiß leider nicht, welche Datentypen ich dafür benutzen muss.<br />
Der <a href="http://de.wikipedia.org/wiki/Windows_Bitmap" rel="nofollow">Wikipediaeintrag</a> hilft mir auch nicht wirklich weiter.</p>
<pre><code class="language-cpp">class c_bitmap
{
private:

	struct d_bitmap
	{
		struct d_bitmapHeader {
			long		bitmapIdent;				// Enthält die Zeichenfolge 'BM'
			short		bitmapSize;					// Größe der BMP-Datei in Byte. (unzuverlässig)
			short		bitmapReserved;				// 0
			short		bitmapOffbits;				// Offset der Bilddaten vom Beginn der Datei an (in Byte).
		} header;									// Objekt für den Bitmapheader. Enthält grundlegende Bitmap-Informationen.

		struct d_bitmapInfoheader {
			short		bitmapSize;					// Größe des Informationsblocks in Byte.
</code></pre>
<p>Sehr weit komme ich nicht, da die eingelesenen Werte nicht überall stimmen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180885/c-bitmap-lade-speicherroutine</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:37:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180885.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 May 2007 18:06:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++] Bitmap Lade&#x2F;Speicherroutine on Mon, 07 May 2007 18:07:26 GMT]]></title><description><![CDATA[<p>Ich möchte mir eine Bitmap Lade/Speicherroutine schreiben.<br />
Nur ich weiß leider nicht, welche Datentypen ich dafür benutzen muss.<br />
Der <a href="http://de.wikipedia.org/wiki/Windows_Bitmap" rel="nofollow">Wikipediaeintrag</a> hilft mir auch nicht wirklich weiter.</p>
<pre><code class="language-cpp">class c_bitmap
{
private:

	struct d_bitmap
	{
		struct d_bitmapHeader {
			long		bitmapIdent;				// Enthält die Zeichenfolge 'BM'
			short		bitmapSize;					// Größe der BMP-Datei in Byte. (unzuverlässig)
			short		bitmapReserved;				// 0
			short		bitmapOffbits;				// Offset der Bilddaten vom Beginn der Datei an (in Byte).
		} header;									// Objekt für den Bitmapheader. Enthält grundlegende Bitmap-Informationen.

		struct d_bitmapInfoheader {
			short		bitmapSize;					// Größe des Informationsblocks in Byte.
</code></pre>
<p>Sehr weit komme ich nicht, da die eingelesenen Werte nicht überall stimmen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280481</guid><dc:creator><![CDATA[Pyro Phoenix]]></dc:creator><pubDate>Mon, 07 May 2007 18:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Bitmap Lade&#x2F;Speicherroutine on Mon, 07 May 2007 18:27:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#if !defined(BITMAP_H__INCLUDED)
#define BITMAP_H__INCLUDED

#include &lt;string&gt;

class Bitmap
{
public:
	Bitmap();
	Bitmap(const std::string&amp;);
	~Bitmap();

public:
	void		load_bitmap(const std::string&amp;);

private:
    struct header
    {
		unsigned short	wType;
		unsigned long	dwSizeFile;
		unsigned long	dwReserved;
		unsigned long	dwOffset;
		header() : wType(0), dwSizeFile(0), dwReserved(0), dwOffset(0)
		{
		}
	}	m_header;
	struct info
	{
		unsigned long	dwSize;
		long			lWidth;
		long			lHeight;
		unsigned short	wPlanes;
		unsigned short	wBpp;
		unsigned long	dwCompression;
		unsigned long	dwSizeFile;
		long			lXPPM;
		long			lYPPM;
		unsigned long	dwBitColor;
		unsigned long	dwImportantColors;
		info () :	dwSize(0), lWidth(0), lHeight(0), wPlanes(0), wBpp(0), dwCompression(0), dwSizeFile(0),
					lXPPM(0), lYPPM(0), dwBitColor(0), dwImportantColors(0)
		{
		}
	}	m_info;
};

#endif // BITMAP_H__INCLUDED
</code></pre>
<pre><code class="language-cpp">#include &quot;Bitmap.h&quot;
#include &lt;fstream&gt;

Bitmap::Bitmap()
{
}

Bitmap::Bitmap(const std::string&amp; filename)
{
	load_bitmap(filename);
}

Bitmap::~Bitmap()
{
}

void Bitmap::load_bitmap(const std::string&amp; filename)
{
	std::ifstream file_stream(filename.c_str(), std::ios::in|std::ios::binary);
	if (!file_stream)
		throw &quot;Could not open file!&quot;;

	file_stream.read(reinterpret_cast&lt;char*&gt;(&amp;m_header), sizeof (Bitmap::header));
	file_stream.read(reinterpret_cast&lt;char*&gt;(&amp;m_info), sizeof (Bitmap::info));

	// ... usw ... //
}
</code></pre>
<p>... wo ist da die Schwierigkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280497</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 07 May 2007 18:27:07 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Bitmap Lade&#x2F;Speicherroutine on Mon, 07 May 2007 18:31:19 GMT]]></title><description><![CDATA[<p>Naja ...</p>
<blockquote>
<p>Im folgenden bezeichnet WORD einen 16-Bit-vorzeichenlosen Integer, DWORD einen 32-Bit-vorzeichenlosen Integer und LONG einen im Zweierkomplement kodierten 32-Bit-Integer. BMP verwendet die Little Endian-Konvention.</p>
</blockquote>
<p>...LONG einen im Zweierkomplement kodierten 32-Bit-Integer...</p>
<p>Öhmm da hats geharkt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1280504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280504</guid><dc:creator><![CDATA[Pyro Phoenix]]></dc:creator><pubDate>Mon, 07 May 2007 18:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Bitmap Lade&#x2F;Speicherroutine on Mon, 07 May 2007 20:40:15 GMT]]></title><description><![CDATA[<p>So hab das Teil mal mit deinen Informationen fertiggestellt ...<br />
Aber das Bitmap wird immernochnicht richtig geladen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>€dit:<br />
Warum gibt der mir mit sizeof ne Länge von 16 bytes aus, obwohl der Header nur 14 bytes lang sein darf ?!<br />
(MSVC++ 6.0 Pro)</p>
<p>16 Bytes:</p>
<pre><code class="language-cpp">struct d_bitmapHeader {
			unsigned short		bitmapIdent;				// Enthält die Zeichenfolge 'BM'
			unsigned long		bitmapSize;					// Größe der BMP-Datei in Byte. (unzuverlässig)
			unsigned long		bitmapReserved;				// 0
			unsigned long		bitmapOffbits;				// Offset der Bilddaten vom Beginn der Datei an (in Byte).
		} header;
</code></pre>
<p>16 Bytes:</p>
<pre><code class="language-cpp">struct d_bitmapHeader {
			unsigned char		bitmapIdent[2];				// Enthält die Zeichenfolge 'BM'
			unsigned long		bitmapSize;					// Größe der BMP-Datei in Byte. (unzuverlässig)
			unsigned long		bitmapReserved;				// 0
			unsigned long		bitmapOffbits;				// Offset der Bilddaten vom Beginn der Datei an (in Byte).
		} header;
</code></pre>
<p>2 Bytes:</p>
<pre><code class="language-cpp">struct d_bitmapHeader {
			unsigned char		bitmapIdent[2];				// Enthält die Zeichenfolge 'BM'
//			unsigned long		bitmapSize;					// Größe der BMP-Datei in Byte. (unzuverlässig)
//			unsigned long		bitmapReserved;				// 0
//			unsigned long		bitmapOffbits;				// Offset der Bilddaten vom Beginn der Datei an (in Byte).
		} header;
</code></pre>
<p>12 Bytes:</p>
<pre><code class="language-cpp">struct d_bitmapHeader {
//			unsigned char		bitmapIdent[2];				// Enthält die Zeichenfolge 'BM'
			unsigned long		bitmapSize;					// Größe der BMP-Datei in Byte. (unzuverlässig)
			unsigned long		bitmapReserved;				// 0
			unsigned long		bitmapOffbits;				// Offset der Bilddaten vom Beginn der Datei an (in Byte).
		} header;
</code></pre>
<p>Sogar in beiden Varianten ( Sind wir nicht alle ein bisschen GAGA ?! )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280553</guid><dc:creator><![CDATA[Pyro Phoenix]]></dc:creator><pubDate>Mon, 07 May 2007 20:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Bitmap Lade&#x2F;Speicherroutine on Tue, 08 May 2007 06:14:57 GMT]]></title><description><![CDATA[<p>Pyro Phoenix schrieb:</p>
<blockquote>
<p>€dit:<br />
Warum gibt der mir mit sizeof ne Länge von 16 bytes aus, obwohl der Header nur 14 bytes lang sein darf ?!</p>
</blockquote>
<p>Such mal nach &quot;Padding&quot; - der Compiler darf zwischen die struct-Elemente Füllbytes setzen, um sie an vernünftige Adressgrenzen ausrichten zu können.</p>
<p>(der MSVC kennt eine #pragma Direktive, mit der du das ausschalten kannst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280636</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 08 May 2007 06:14:57 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Bitmap Lade&#x2F;Speicherroutine on Tue, 08 May 2007 07:54:32 GMT]]></title><description><![CDATA[<p>Ich glaub, ich habs ...<br />
Für die Boardsuche:</p>
<blockquote>
<p>For Visual C++, you can disable padding as follows:</p>
<pre><code class="language-cpp">#pragma pack(push)
#pragma pack(1)
struct Foo {
   ...
};
#pragma pack(pop)
</code></pre>
<p>A better idea, though, is just to split the dword member into two words and be done with it. Your struct will generally be free of padding if each element is aligned to its size and the struct size is evenly divisible by the largest element.</p>
<p>The rule for sizeof() is that it returns the size of an object as if it were an array element. Even though your struct doesn't need to be padded when used by itself, sizeof() still returns the padded size.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1280689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280689</guid><dc:creator><![CDATA[Pyro Phoenix]]></dc:creator><pubDate>Tue, 08 May 2007 07:54:32 GMT</pubDate></item></channel></rss>