<?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[Bilddifferenzen erkennen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich interessiere mich für das Vergelichen von Bitmaps.<br />
Könnt ihr mir sagen wie ich dabei vorgehe? Gibt es dafür<br />
evtl. bereits spezielle Klassen oder Funktionen, die das<br />
etwas erleichtern?</p>
<p>Danke<br />
JJay</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158408/bilddifferenzen-erkennen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:14:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158408.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Sep 2006 08:12:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 08:12:50 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich interessiere mich für das Vergelichen von Bitmaps.<br />
Könnt ihr mir sagen wie ich dabei vorgehe? Gibt es dafür<br />
evtl. bereits spezielle Klassen oder Funktionen, die das<br />
etwas erleichtern?</p>
<p>Danke<br />
JJay</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131289</guid><dc:creator><![CDATA[JJay]]></dc:creator><pubDate>Tue, 05 Sep 2006 08:12:50 GMT</pubDate></item><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 08:52:46 GMT]]></title><description><![CDATA[<p>geht es hier um den Pixelweisen vergleich oder um Objekt-, Kantenerkennung etc.?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131316</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Tue, 05 Sep 2006 08:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 09:04:10 GMT]]></title><description><![CDATA[<p>Pixelweis reicht vollkommen! <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/1131324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131324</guid><dc:creator><![CDATA[JJay]]></dc:creator><pubDate>Tue, 05 Sep 2006 09:04:10 GMT</pubDate></item><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 09:22:34 GMT]]></title><description><![CDATA[<p>Das habe ich schonmal gemacht, leider hab ich wohl die Source nicht mehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Aber im Prinzip ganz einfach:<br />
- beide Bitmaps laden (vom Dateisystem mit LoadImage)<br />
- mit GetObject die BITMAP Struktur auslesen<br />
- in 2 Schleifen die Pixelwerte vergleichen</p>
<p>Ich hab die abweichenden Pixel in eine neue Bitmap abgelegt und abgespeichert.<br />
So konnte man die Unterschiede schön sehen...</p>
<p>EDIT: vielleicht kann man auch irgendwelche Graphic-Libs nehmen, das war jetzt reine WinAPI</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131333</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Tue, 05 Sep 2006 09:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 14:45:46 GMT]]></title><description><![CDATA[<p>Das wra zwra nicht der echte JJay <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="😉"
    /> aber recht hat er.<br />
Pixelweise reicht. Ich möchte gerne die Bilddifferenzen<br />
erkennen.</p>
<p>Ist das sowas wie die Daten in ein Array packen und dann<br />
vergleichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131596</guid><dc:creator><![CDATA[JJay]]></dc:creator><pubDate>Tue, 05 Sep 2006 14:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 14:59:21 GMT]]></title><description><![CDATA[<p>Naja .. wie Airdamm schon sagt ... du füllst erst die BITMAP struct und vergleichst dann ihren Inhalt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1131610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131610</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 05 Sep 2006 14:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to Bilddifferenzen erkennen on Tue, 05 Sep 2006 17:18:22 GMT]]></title><description><![CDATA[<p>Hi, hab mich mal kurz dran gesetzt und was gebastelt...sollte funktionieren:</p>
<pre><code class="language-cpp">// SBitmapCmpInfo speichert die Ergebnisse des Vergleichs.
struct SBitmapCmpInfo
{
	bool fSizeCmp;
	bool fBitsPixelCmp;
	bool fColorCmp;
};

/*
CompareBitmaps:
~~~~~~~~~~~~~~~
Vergleicht zwei Bitmaps auf folgende Merkmale:
    1. Größe (fSizeCmp)
    2. Farbtiefe (fBitsPixelCmp)
    3. Farben (fColorCmp)
Diese Vergleichsinformationen werden in der SBitmapCmpInfo-Struktur abgelegt
(Übergabe per Referenz wg. Performance).

Parameter:
~~~~~~~~~~
Typ               Variable:         Erklärung:
-----------------------------------------------------------------------------
HBITMAP        hbmpSrc:        1. zu vergleichende Bitmap
HBITMAP        hbmpCmp:        2. zu vergleichende Bitmap
SBitmapCmpInfo bciData:        Ergebnisse des Vergleichs
bool           fReleaseHandle: Bei Angabe von 'true' werden die Bitmap-Handle in der Funktion freigeben.
*/

bool CompareBitmaps(HBITMAP hbmpSrc, HBITMAP hbmpCmp, SBitmapCmpInfo&amp; bciData, bool fReleaseHandle = false)
{
	if(hbmpSrc == NULL || hbmpSrc == NULL)
	{
		memset(&amp;bciData, false, sizeof(SBitmapCmpInfo));
		return (false);
	}

	BITMAP	bmInfoSrc,
			bmInfoCmp;
	HDC		hdcMemSrc,
			hdcMemCmp;
	HBITMAP	hbmpPrevSrc,
			hbmpPrevCmp;

	memset(&amp;bciData, true, sizeof(SBitmapCmpInfo));

	GetObject(hbmpSrc, sizeof(BITMAP), &amp;bmInfoSrc);
	GetObject(hbmpCmp, sizeof(BITMAP), &amp;bmInfoCmp);

	if(bmInfoSrc.bmBitsPixel != bmInfoCmp.bmBitsPixel)
		bciData.fBitsPixelCmp = false;

	hdcMemSrc	= CreateCompatibleDC(NULL);
	hdcMemCmp	= CreateCompatibleDC(NULL);
	hbmpPrevSrc	= reinterpret_cast&lt;HBITMAP&gt;(SelectObject(hdcMemSrc, hbmpSrc));
	hbmpPrevCmp	= reinterpret_cast&lt;HBITMAP&gt;(SelectObject(hdcMemCmp, hbmpCmp));

	if(bmInfoSrc.bmHeight != bmInfoCmp.bmHeight ||
	   bmInfoSrc.bmWidth  != bmInfoCmp.bmWidth)
	{
		bciData.fSizeCmp  = false;

		long lOffsetWidth,
			 lOffsetHeight;
		if(bmInfoSrc.bmWidth &gt; bmInfoCmp.bmWidth)
			lOffsetWidth = bmInfoCmp.bmWidth;
		else
			lOffsetWidth = bmInfoSrc.bmWidth;
		if(bmInfoSrc.bmHeight &gt; bmInfoCmp.bmHeight)
			lOffsetHeight = bmInfoCmp.bmHeight;
		else
			lOffsetHeight = bmInfoSrc.bmHeight;

		for(long lXPos = 0L; lXPos &lt; lOffsetHeight; lXPos++)
		{
			for(long lYPos = 0L; lYPos &lt; lOffsetWidth; lYPos++)
			{
				if(GetPixel(hdcMemSrc, lXPos, lYPos) != GetPixel(hdcMemCmp, lXPos, lYPos))
				{
					bciData.fColorCmp = false;
					break;				
				}
			}
			if(!bciData.fColorCmp)
					break;
		}

		SelectObject(hdcMemSrc, hbmpPrevSrc);
		SelectObject(hdcMemCmp, hbmpPrevSrc);
		DeleteDC(hdcMemSrc);
		DeleteDC(hdcMemCmp);
		if(fReleaseHandle)
		{
			DeleteObject(hbmpSrc);
			DeleteObject(hbmpCmp);
		}
		return (true);
	}

	for(long lXPos = 0L; lXPos &lt; bmInfoSrc.bmHeight; lXPos++)
	{
		for(long lYPos = 0L; lYPos &lt; bmInfoSrc.bmWidth; lYPos++)
		{
			if(GetPixel(hdcMemSrc, lXPos, lYPos) != GetPixel(hdcMemCmp, lXPos, lYPos))
			{
				bciData.fColorCmp = false;
				break;				
			}
		}
		if(!bciData.fColorCmp)
				break;
	}

	SelectObject(hdcMemSrc, hbmpPrevSrc);
	SelectObject(hdcMemCmp, hbmpPrevSrc);
	DeleteDC(hdcMemSrc);
	DeleteDC(hdcMemCmp);
	if(fReleaseHandle)
	{
		DeleteObject(hbmpSrc);
		DeleteObject(hbmpCmp);
	}
	return (true);
}
</code></pre>
<p><strong>Hinweis:</strong><br />
Sollte die Größe (Breite und Höhe) nicht gleich sein, vergleicht die Funktion die noch verbleibenden Pixel<br />
auf Farbübereinstimmung.</p>
<p>PS: Sry aber zu Kommentaren konnte ich mich nit mehr druchwringen, sollte aber verständlich sein <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/1131720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1131720</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 05 Sep 2006 17:18:22 GMT</pubDate></item></channel></rss>