<?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[[Prob] DIB Bitmap aus Scanner (Twain-Quelle) korrekt speichern]]></title><description><![CDATA[<p>Hallo an alle - ich bin der Neue <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="🙂"
    /><br />
Geistere hier schon länger rum, jetzt hab ich mich mal angemeldet...</p>
<p>Ich habe folgendes Problem:</p>
<p>ich habe eine Klasse, die mir per TWAIN etwas einscannt.<br />
Das Scannen an sich klappt wunderbar, ich kann den Scanenr ansteuern, er scannt und es befindet sich anscheinend ein Bitmap als DIB (device independent bitmap) im Speicher.</p>
<p>Per Sendmessage sende ich beim TWAIN State 7 - wenn case TWRC_XFERDONE erreicht wurde - folgendes an meine Nachrichtenschleife:</p>
<pre><code class="language-cpp">SendMessage(hWnd, WM_TW_IMAGE, 0, hBitmap);
</code></pre>
<p>Sendmessage müsste hier ja korrekt aufgerufen worden sein, denn ich erhalte wirklich in der WindowMessage eine Nachricht, dass ein Handle auf ein Bitmap auf mich wartet <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>
<p>Über</p>
<pre><code class="language-cpp">ostringstream xyz;
 xyz&lt;&lt; lParam;
 MessageBox(NULL,xyz.str().c_str(),&quot;Ausgabe lParam&quot;,MB_OK);
</code></pre>
<p>bekomme ich die Handle-Nummer des lParams...Alles schein i.O.</p>
<p>Nun will ich das Bitmap speichern - und jetzt meine Frage - wo ist der fehler begraben?</p>
<pre><code class="language-cpp">// Infoheader
	BITMAPINFO infoheader;
	infoheader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	infoheader.bmiHeader.biWidth = 500; // Breite in Pixeln
	infoheader.bmiHeader.biHeight = 500; // Höhe in Pixeln
	infoheader.bmiHeader.biPlanes = 1;
	infoheader.bmiHeader.biBitCount = 24; // Farbtiefe in bits
	infoheader.bmiHeader.biCompression = 0;
	infoheader.bmiHeader.biSizeImage = 0;
	infoheader.bmiHeader.biXPelsPerMeter = 0;
	infoheader.bmiHeader.biYPelsPerMeter = 0;
	infoheader.bmiHeader.biClrUsed = 0;
	infoheader.bmiHeader.biClrImportant = 0;

// Platz für die Pixeldaten reservieren
	int* bitmap = new int[500*500*3]; // Breite*Höhe*Farbtiefe (Bytes)

// Fileheader
	BITMAPFILEHEADER fileheader;
	fileheader.bfType = 19778; // 'BM'
	fileheader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(bitmap); // Gesamtgröße der Datei
	fileheader.bfReserved1 = 0;
	fileheader.bfReserved2 = 0;
	fileheader.bfOffBits = sizeof(BITMAPFILEHEADER) +   sizeof(BITMAPINFOHEADER); // ab hier Pixel

// Die Pixeldaten aus der hbitmap in bitmap kopieren
HDC dc  = CreateDC(NULL, NULL, NULL, NULL);
HDC mem = CreateCompatibleDC(dc);

// Create a bitmap and link it to the memory dc
HBITMAP hbitmap = CreateCompatibleBitmap(dc, 500, 500);

if (GetDIBits(mem, (HBITMAP)lParam, 0, 500, bitmap, (BITMAPINFO*)&amp;infoheader, DIB_RGB_COLORS)==0)
MessageBox(NULL,&quot;fehler&quot;,&quot;fehler0&quot;,MB_OK); // hier gibt er fehler aus 

// Eine neue Datei erstellen bzw eine bestehende öffnen
HANDLE hfile = CreateFile(&quot;d:\\cmap.bmp&quot;, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, 0);

// Die Daten in die Datei schreiben
DWORD dummy;
WriteFile(hfile, &amp;fileheader, 14, &amp;dummy, NULL);
WriteFile(hfile, &amp;infoheader, 40, &amp;dummy, NULL);
WriteFile(hfile, bitmap, 750000, &amp;dummy, NULL);

// Aufräumen
DeleteObject(hbitmap);
ReleaseDC(hWnd, dc);
CloseHandle(hfile);
</code></pre>
<p>Nun seid ihr dran - woran könnts liegen?<br />
Oder seh ich vor Code den Wald nicht <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/topic/173352/prob-dib-bitmap-aus-scanner-twain-quelle-korrekt-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 22:19:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173352.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Feb 2007 13:36:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Prob] DIB Bitmap aus Scanner (Twain-Quelle) korrekt speichern on Wed, 14 Feb 2007 13:36:34 GMT]]></title><description><![CDATA[<p>Hallo an alle - ich bin der Neue <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="🙂"
    /><br />
Geistere hier schon länger rum, jetzt hab ich mich mal angemeldet...</p>
<p>Ich habe folgendes Problem:</p>
<p>ich habe eine Klasse, die mir per TWAIN etwas einscannt.<br />
Das Scannen an sich klappt wunderbar, ich kann den Scanenr ansteuern, er scannt und es befindet sich anscheinend ein Bitmap als DIB (device independent bitmap) im Speicher.</p>
<p>Per Sendmessage sende ich beim TWAIN State 7 - wenn case TWRC_XFERDONE erreicht wurde - folgendes an meine Nachrichtenschleife:</p>
<pre><code class="language-cpp">SendMessage(hWnd, WM_TW_IMAGE, 0, hBitmap);
</code></pre>
<p>Sendmessage müsste hier ja korrekt aufgerufen worden sein, denn ich erhalte wirklich in der WindowMessage eine Nachricht, dass ein Handle auf ein Bitmap auf mich wartet <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>
<p>Über</p>
<pre><code class="language-cpp">ostringstream xyz;
 xyz&lt;&lt; lParam;
 MessageBox(NULL,xyz.str().c_str(),&quot;Ausgabe lParam&quot;,MB_OK);
</code></pre>
<p>bekomme ich die Handle-Nummer des lParams...Alles schein i.O.</p>
<p>Nun will ich das Bitmap speichern - und jetzt meine Frage - wo ist der fehler begraben?</p>
<pre><code class="language-cpp">// Infoheader
	BITMAPINFO infoheader;
	infoheader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	infoheader.bmiHeader.biWidth = 500; // Breite in Pixeln
	infoheader.bmiHeader.biHeight = 500; // Höhe in Pixeln
	infoheader.bmiHeader.biPlanes = 1;
	infoheader.bmiHeader.biBitCount = 24; // Farbtiefe in bits
	infoheader.bmiHeader.biCompression = 0;
	infoheader.bmiHeader.biSizeImage = 0;
	infoheader.bmiHeader.biXPelsPerMeter = 0;
	infoheader.bmiHeader.biYPelsPerMeter = 0;
	infoheader.bmiHeader.biClrUsed = 0;
	infoheader.bmiHeader.biClrImportant = 0;

// Platz für die Pixeldaten reservieren
	int* bitmap = new int[500*500*3]; // Breite*Höhe*Farbtiefe (Bytes)

// Fileheader
	BITMAPFILEHEADER fileheader;
	fileheader.bfType = 19778; // 'BM'
	fileheader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(bitmap); // Gesamtgröße der Datei
	fileheader.bfReserved1 = 0;
	fileheader.bfReserved2 = 0;
	fileheader.bfOffBits = sizeof(BITMAPFILEHEADER) +   sizeof(BITMAPINFOHEADER); // ab hier Pixel

// Die Pixeldaten aus der hbitmap in bitmap kopieren
HDC dc  = CreateDC(NULL, NULL, NULL, NULL);
HDC mem = CreateCompatibleDC(dc);

// Create a bitmap and link it to the memory dc
HBITMAP hbitmap = CreateCompatibleBitmap(dc, 500, 500);

if (GetDIBits(mem, (HBITMAP)lParam, 0, 500, bitmap, (BITMAPINFO*)&amp;infoheader, DIB_RGB_COLORS)==0)
MessageBox(NULL,&quot;fehler&quot;,&quot;fehler0&quot;,MB_OK); // hier gibt er fehler aus 

// Eine neue Datei erstellen bzw eine bestehende öffnen
HANDLE hfile = CreateFile(&quot;d:\\cmap.bmp&quot;, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, 0);

// Die Daten in die Datei schreiben
DWORD dummy;
WriteFile(hfile, &amp;fileheader, 14, &amp;dummy, NULL);
WriteFile(hfile, &amp;infoheader, 40, &amp;dummy, NULL);
WriteFile(hfile, bitmap, 750000, &amp;dummy, NULL);

// Aufräumen
DeleteObject(hbitmap);
ReleaseDC(hWnd, dc);
CloseHandle(hfile);
</code></pre>
<p>Nun seid ihr dran - woran könnts liegen?<br />
Oder seh ich vor Code den Wald nicht <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/1228752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228752</guid><dc:creator><![CDATA[dernordischegott123]]></dc:creator><pubDate>Wed, 14 Feb 2007 13:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to [Prob] DIB Bitmap aus Scanner (Twain-Quelle) korrekt speichern on Wed, 14 Feb 2007 15:45:53 GMT]]></title><description><![CDATA[<p>nicht dass jemand denkt, ich sei nicht registriert.....<br />
hier bin ich - das klappte anscheinend nicht so wie ich dachte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228859</guid><dc:creator><![CDATA[dernordischegott]]></dc:creator><pubDate>Wed, 14 Feb 2007 15:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to [Prob] DIB Bitmap aus Scanner (Twain-Quelle) korrekt speichern on Wed, 14 Feb 2007 15:59:05 GMT]]></title><description><![CDATA[<p>es wäre noch hilfreich, wenn du den konkreten fehler beschreibst - passiert nix? speichert er nix? schmiert er ab? fehlermeldung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228874</guid><dc:creator><![CDATA[Martin S]]></dc:creator><pubDate>Wed, 14 Feb 2007 15:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to [Prob] DIB Bitmap aus Scanner (Twain-Quelle) korrekt speichern on Wed, 14 Feb 2007 20:02:20 GMT]]></title><description><![CDATA[<p>Oh ja Martin,</p>
<p>die Fehlerbeschreibung hab ich ganz vergessen.<br />
Also er erstellt eine Bitmap-Datei, die aber komplett grau ist.<br />
Sprich, er füllt die Bitmap nicht korrekt.</p>
<p>Ich weiss halt nicht wirklich, ob die DIB-Bitmap korrekt ist.<br />
Laut der TWAIN-Dokumentation ist das Bitmap am Ende des Scanvorgangs (wenn TWRC_XFERDONE erreicht wurde) eindeutig eine Native DIB....</p>
<p>Kann man vielleicht testen, ob das Handle, welches ich habe, überhaubt korrekt ankam? Und ist GetDIBits auch die richtige Wahl um das Bitmap umzuformen?</p>
<p>Also laut Fehler - und das ist es ja wenn GetDIBits = 0 ist, kann also nur da liegen.</p>
<p>Aber was ist die Lösung - danke fürs lesen <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/1229061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229061</guid><dc:creator><![CDATA[dernordischegott]]></dc:creator><pubDate>Wed, 14 Feb 2007 20:02:20 GMT</pubDate></item></channel></rss>