<?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[32 bit binärdaten spezifisch als rgb+x auswerten]]></title><description><![CDATA[<p>Ich habe eine Kamera die 10 und 8 Bit Werte in einem linearen Speicher zurück liefert. Diese Matrix hat pro Pixel 32 Bit. Diese sind nun organisiert als</p>
<p>8 Bit: r(8) g(8) b(8) + x(8)<br />
10 Bit: r(10) g(10) b(10) + x(2)</p>
<p>wobei x Müll oder Null enthält.</p>
<p>Wie kann ich diese Pixel die ich z.B. als Integer lesen könnte so interpretieren,<br />
dass ich die Werte von r,g,b einzeln wieder abspeichern kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268320/32-bit-binärdaten-spezifisch-als-rgb-x-auswerten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 00:08:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268320.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Jun 2010 15:06:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Mon, 07 Jun 2010 15:06:04 GMT]]></title><description><![CDATA[<p>Ich habe eine Kamera die 10 und 8 Bit Werte in einem linearen Speicher zurück liefert. Diese Matrix hat pro Pixel 32 Bit. Diese sind nun organisiert als</p>
<p>8 Bit: r(8) g(8) b(8) + x(8)<br />
10 Bit: r(10) g(10) b(10) + x(2)</p>
<p>wobei x Müll oder Null enthält.</p>
<p>Wie kann ich diese Pixel die ich z.B. als Integer lesen könnte so interpretieren,<br />
dass ich die Werte von r,g,b einzeln wieder abspeichern kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908391</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 07 Jun 2010 15:06:04 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Mon, 07 Jun 2010 15:17:47 GMT]]></title><description><![CDATA[<p>Bin mir nicht sicher was Du meinst aber ich denke mal du möchtest die bestimmten bits auslesen.</p>
<p>Du kommst z.B. an die r-werte in dem du eine Bitmask benutzt um sie auszulesen.<br />
Also:</p>
<pre><code>int rWert = 0xff000000 &amp; RGBintegerWert;
int rWert = rWert &gt;&gt; 24;
</code></pre>
<p>Wenn Du die jetzt noch um 24 stellen nach rechts shiftest (2.code zeile) dann hast Du die werte...<br />
Bei den 10 bit werten sähe die Maske dann so aus 0xff600000 und der shift nur um 22 stellen.</p>
<p>gruß muli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908403</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Mon, 07 Jun 2010 15:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Mon, 07 Jun 2010 15:23:33 GMT]]></title><description><![CDATA[<p>Ok, sowas in der Art habe ich gesucht. Nur zum Verständnis: Bei Grün shifte ich dann um 16 und bei Blau um 8?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908408</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 07 Jun 2010 15:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Mon, 07 Jun 2010 15:32:35 GMT]]></title><description><![CDATA[<p>ja und deine bitmask sieht anders aus:</p>
<p>Willst du die Bits 24 - 16 auslesen dann: 0x00ff0000<br />
für die Bits 22-12 : 0x00ff6000</p>
<p>Die shifts musst du dann anpassen aber nach dem was Du schreibst ist dieser Teil schon so gut wie verstanden <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/1908414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908414</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Mon, 07 Jun 2010 15:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Tue, 08 Jun 2010 10:59:08 GMT]]></title><description><![CDATA[<p>muli schrieb:</p>
<blockquote>
<p>ja und deine bitmask sieht anders aus:</p>
<p>Willst du die Bits 24 - 16 auslesen dann: 0x00ff0000<br />
für die Bits 22-12 : 0x00ff6000</p>
</blockquote>
<p>Ich bin verwirrt. 10 bit sind 1024 Werte, in Hex wäre das 400, ff6 dagegen wäre 4096 = 12 bit.</p>
<p>Müsste dann die Maske nicht eher so aussehen:</p>
<p>32-22: 0x40000000<br />
22-12: 0x00400000<br />
12-10: 0x00001000</p>
<p>Nicht das ich mit Hexzahlen gut umgehen könnte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908811</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 08 Jun 2010 10:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Tue, 08 Jun 2010 11:12:27 GMT]]></title><description><![CDATA[<p>Also die Zahl die dadurch beschrieben wird ist nun erstmal irrelevant.</p>
<p>Du hast bsw.: eine 32-bit wert mit deinen rgb werten der so aussieht:</p>
<p>11110000111100001111000011110000 diese Zahl als hex ist die folgende 0xf0f0f0f0.</p>
<p>So du willst jetzt die ersten 10 bits haben also machst du ein bitweises UND :</p>
<p>11110000111100001111000011110000 // deine rgbx Werte<br />
&amp;<br />
11111111110000000000000000000000 // und deine Maske 0xff600000<br />
------------------------------------------<br />
das Ergebnis ist eine Zahl die dort eine 1 hat wo beide eine 1 haben und 0 sonnst.</p>
<p>also bekommst du :<br />
11110000110000000000000000000000 das sind deine ersten 10 Bits.</p>
<p>Dann der shift und du hast 1111000011 als dein Ergebnis.</p>
<p>Die bei der Maske ist es wichtig die Einsen an der richtigen Stelle zu haben.<br />
und ff6 sind 10 einsen in Folge...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908814</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Tue, 08 Jun 2010 11:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Tue, 08 Jun 2010 11:26:33 GMT]]></title><description><![CDATA[<p>malen wirs doch mal auf:</p>
<p>so sieht das in 10 bit aus (hab mal big und litte endian ignoriert)</p>
<p>rrrr rrrr rrgg gggg gggg bbbb bbbb bbxx</p>
<p>r: 1111 1111 1100 0000 0000 0000 0000 0000 hex: ffc00000<br />
g: 0000 0000 0011 1111 1111 0000 0000 0000 hex: 003ff000<br />
b: 0000 0000 0000 0000 0000 1111 1111 1100 hex: 00000ffc</p>
<p>Jetzt sollen aus den 10-bit werten 8 bit werte werden, wo man erstmal definieren muß welche beiden bits wegfallen sollen (most oder least significant). Ich würde auf letzte tippen, also sähe das so aus:</p>
<p>(zwischenwerte)</p>
<p>r1 = wert &amp; 0xff000000<br />
g1 = wert &amp; 0x003fc000<br />
b1 = wert &amp; 0x00000ff0</p>
<p>Jetzt sollen die ja in r8g8b8x8 umgewandelt werden:</p>
<p>rrrr rrrr gggg gggg bbbb bbbb xxxx xxxx<br />
also schieben wir:</p>
<p>ergebnis = r1 | (g1 &lt;&lt; 2) | (b1 &lt;&lt; 4);</p>
<p>Natürlich müste man jetzt noch big- und littel endian berücksichtigen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908816</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Tue, 08 Jun 2010 11:26:33 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Tue, 08 Jun 2010 11:27:35 GMT]]></title><description><![CDATA[<p>muli schrieb:</p>
<blockquote>
<p>ff6 sind 10 einsen in Folge...</p>
</blockquote>
<p>Fast.</p>
<p>f: 1111<br />
6: 0110 (2 + 4)</p>
<p>ff6 = 1111 1111 0110</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908817</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Tue, 08 Jun 2010 11:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Tue, 08 Jun 2010 11:41:05 GMT]]></title><description><![CDATA[<pre><code>#include &lt;cassert&gt;

template&lt;int bits&gt;
struct rgb
{
	unsigned int r : bits;
	unsigned int g : bits;
	unsigned int b : bits;
};

int main()
{
	rgb&lt;8&gt; grau8bit;
	grau8bit.r = 127;
	grau8bit.g = 127;
	grau8bit.b = 127;

	assert(sizeof(grau8bit)== sizeof(int));

	rgb&lt;10&gt; grau10bit;
	grau10bit.r = 511;
	grau10bit.g = 511;
	grau10bit.b = 511;

	assert(sizeof(grau10bit)== sizeof(int));
	return 0;
}}
</code></pre>
<p>Gruß<br />
Drehleiter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908820</guid><dc:creator><![CDATA[Drehleiter]]></dc:creator><pubDate>Tue, 08 Jun 2010 11:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Tue, 08 Jun 2010 11:56:23 GMT]]></title><description><![CDATA[<p>Ok dann versuch ich es mal mit 'ffc' statt dessen <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/1908830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908830</guid><dc:creator><![CDATA[muli]]></dc:creator><pubDate>Tue, 08 Jun 2010 11:56:23 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Fri, 16 Jul 2010 14:18:17 GMT]]></title><description><![CDATA[<p>Drehleiter schrieb:</p>
<blockquote>
<pre><code>template&lt;int bits&gt;
struct rgb
{
	unsigned int r : bits;
	unsigned int g : bits;
	unsigned int b : bits;
};
</code></pre>
</blockquote>
<p>Wie ist den diese Syntax zu verstehen? Gibt das Speicher mit exakt 'bits' Speicherbreite?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927281</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 16 Jul 2010 14:18:17 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Fri, 16 Jul 2010 16:11:02 GMT]]></title><description><![CDATA[<p>Google mal nach C++ und bitset</p>
<p>Die Lösung von Drehleiter dürfte auf den meisten Rechnern funktionieren. Aber ich finde es besser, das alignment explizit zu machen.</p>
<pre><code class="language-cpp">template&lt;int bits, int offset&gt;
struct rgb
{
    unsigned int r : bits;
    unsigned int g : bits;
    unsigned int b : bits;
    unsigned int x : offset;
};

int main()
{
    rgb&lt;8, 8&gt; grau8bit; // rgbxrgbx
    grau8bit.r = 127;
    grau8bit.g = 127;
    grau8bit.b = 127;

    assert(sizeof(grau8bit)== sizeof(int));

    rgb&lt;10, 2&gt; grau10bit;
    grau10bit.r = 511;
    grau10bit.g = 511;
    grau10bit.b = 511;

    assert(sizeof(grau10bit)== sizeof(int));
    return 0;
}}
</code></pre>
<p>Aber Achtung: M.W. sind bitsets nicht sehr genau im Standard definiert, sprich: Vieles ist implementierungsabhänging. Das betrifft IIRC insbesondere das Alignment der einzelnen Elemente.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927319</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 16:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to 32 bit binärdaten spezifisch als rgb+x auswerten on Fri, 16 Jul 2010 16:12:15 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Wie ist den diese Syntax zu verstehen? Gibt das Speicher mit exakt 'bits' Speicherbreite?</p>
</blockquote>
<p>Ja, das sind &quot;bitfields&quot;. Aber das Layout ist nicht standardisiert und daher kannst du das so nicht portabel benutzen. Geh auf Nummer sicher: shift/and</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927323</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 16 Jul 2010 16:12:15 GMT</pubDate></item></channel></rss>