<?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[Bitmap laden =&amp;gt; speichern]]></title><description><![CDATA[<p>Hallo, ich möchte eine Bitmap laden verändern und speichern.</p>
<p>Nach langem tüfteln habe ich es geschaft die Bitmap zu laden und an die einzelenen Farbwerte zu kommen:</p>
<pre><code class="language-cpp">//Teste , ob die zu öffnende Datei exsistiert
		fstream file;                           
		file.open(filename, ios::in);   
		if (!file) 
		{ 
			file.close();                         
			return false;   
		} 

		//Lade das HBITMAP
		HBITMAP phBitmap;
		phBitmap = (HBITMAP)LoadImage( NULL,filename, IMAGE_BITMAP, 0, 0,
			LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

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

		groesse =(bm.bmBitsPixel/8) * bm.bmWidth * bm.bmHeight; 
		BYTE *pBuffer = new BYTE[groesse];
		GetBitmapBits(phBitmap,groesse,  pBuffer) ;
</code></pre>
<p>Jetzt wollte ich zum Test einfach das Bild heller machen also</p>
<pre><code class="language-cpp">for (long x=0; x&lt; bm.bmWidth * bmHeigh; x++) {
			if (pBuffer[x] &lt;= 245) {pBuffer[x]=pBuffer[x]+10;			
		}
</code></pre>
<p>Ich habe mir auch schon im Archiv folgendes angesehen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39400.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39400.html</a><br />
Da ich aber noch nicht so viel Ahnung habe komme ich damit nicht zurecht.</p>
<p>Wie kann ich nun dieses Array von Farbinformationen wieder als BMP abspeichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191294/bitmap-laden-gt-speichern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 07:08:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191294.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Sep 2007 11:48:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 11:48:03 GMT]]></title><description><![CDATA[<p>Hallo, ich möchte eine Bitmap laden verändern und speichern.</p>
<p>Nach langem tüfteln habe ich es geschaft die Bitmap zu laden und an die einzelenen Farbwerte zu kommen:</p>
<pre><code class="language-cpp">//Teste , ob die zu öffnende Datei exsistiert
		fstream file;                           
		file.open(filename, ios::in);   
		if (!file) 
		{ 
			file.close();                         
			return false;   
		} 

		//Lade das HBITMAP
		HBITMAP phBitmap;
		phBitmap = (HBITMAP)LoadImage( NULL,filename, IMAGE_BITMAP, 0, 0,
			LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

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

		groesse =(bm.bmBitsPixel/8) * bm.bmWidth * bm.bmHeight; 
		BYTE *pBuffer = new BYTE[groesse];
		GetBitmapBits(phBitmap,groesse,  pBuffer) ;
</code></pre>
<p>Jetzt wollte ich zum Test einfach das Bild heller machen also</p>
<pre><code class="language-cpp">for (long x=0; x&lt; bm.bmWidth * bmHeigh; x++) {
			if (pBuffer[x] &lt;= 245) {pBuffer[x]=pBuffer[x]+10;			
		}
</code></pre>
<p>Ich habe mir auch schon im Archiv folgendes angesehen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39400.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39400.html</a><br />
Da ich aber noch nicht so viel Ahnung habe komme ich damit nicht zurecht.</p>
<p>Wie kann ich nun dieses Array von Farbinformationen wieder als BMP abspeichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356723</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Sat, 01 Sep 2007 11:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 13:12:30 GMT]]></title><description><![CDATA[<p>Also, wie man eine Bitmap speichert kann ich dir nicht sagen.</p>
<p>Aber das mit der Datei existiert, macht man mmit [url=&quot;FileExists&quot;]<a href="http://msdn2.microsoft.com/en-us/library/x23stk5t.aspx%5B/url%5D" rel="nofollow">http://msdn2.microsoft.com/en-us/library/x23stk5t.aspx[/url]</a></p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356785</guid><dc:creator><![CDATA[Script-Styler]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 13:36:52 GMT]]></title><description><![CDATA[<p>Gut,hab ich jetrzt mit File exists und wie speicher ich die farbinformationen wieder als BMP ab?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356801</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 14:21:38 GMT]]></title><description><![CDATA[<p><a href="http://msdn2.microsoft.com/en-us/library/ms532340.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms532340.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356821</guid><dc:creator><![CDATA[MisterE]]></dc:creator><pubDate>Sat, 01 Sep 2007 14:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 15:13:26 GMT]]></title><description><![CDATA[<p>Hallo, es funktioniert leider noch nicht ganz. Ich versuche jetzt das Bild erst einmal nur Pixel für Pixel zu kopieren ohne Manipulationen. Doch leider wird das<br />
BMP was ich erhalte riesig (Einige Hundert MB) und ist nicht zu öffnen, da fehlerhaft.</p>
<pre><code class="language-cpp">PBITMAPINFO CreateBitmapInfoStruct(HWND hwnd, HBITMAP hBmp)
{ 
    BITMAP bmp; 
    PBITMAPINFO pbmi; 
    WORD    cClrBits; 

    // Retrieve the bitmap color format, width, and height. 
    if (!GetObject(hBmp, sizeof(BITMAP), (LPSTR)&amp;bmp)) 
	{}

    // Convert the color format to a count of bits. 
    cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel); 
    if (cClrBits == 1) 
        cClrBits = 1; 
    else if (cClrBits &lt;= 4) 
        cClrBits = 4; 
    else if (cClrBits &lt;= 8) 
        cClrBits = 8; 
    else if (cClrBits &lt;= 16) 
        cClrBits = 16; 
    else if (cClrBits &lt;= 24) 
        cClrBits = 24; 
    else cClrBits = 32; 

    // Allocate memory for the BITMAPINFO structure. (This structure 
    // contains a BITMAPINFOHEADER structure and an array of RGBQUAD 
    // data structures.) 

     if (cClrBits != 24) 
         pbmi = (PBITMAPINFO) LocalAlloc(LPTR, 
                    sizeof(BITMAPINFOHEADER) + 
                    sizeof(RGBQUAD) * (1&lt;&lt; cClrBits)); 

     // There is no RGBQUAD array for the 24-bit-per-pixel format. 

     else 
         pbmi = (PBITMAPINFO) LocalAlloc(LPTR, 
                    sizeof(BITMAPINFOHEADER)); 

    // Initialize the fields in the BITMAPINFO structure. 

    pbmi-&gt;bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 
    pbmi-&gt;bmiHeader.biWidth = bmp.bmWidth; 
    pbmi-&gt;bmiHeader.biHeight = bmp.bmHeight; 
    pbmi-&gt;bmiHeader.biPlanes = bmp.bmPlanes; 
    pbmi-&gt;bmiHeader.biBitCount = bmp.bmBitsPixel; 
    if (cClrBits &lt; 24) 
        pbmi-&gt;bmiHeader.biClrUsed = (1&lt;&lt;cClrBits); 

    // If the bitmap is not compressed, set the BI_RGB flag. 
    pbmi-&gt;bmiHeader.biCompression = BI_RGB; 

    // Compute the number of bytes in the array of color 
    // indices and store the result in biSizeImage. 
    // For Windows NT, the width must be DWORD aligned unless 
    // the bitmap is RLE compressed. This example shows this. 
    // For Windows 95/98/Me, the width must be WORD aligned unless the 
    // bitmap is RLE compressed.
    pbmi-&gt;bmiHeader.biSizeImage = ((pbmi-&gt;bmiHeader.biWidth * cClrBits +31) &amp; ~31) /8
                                  * pbmi-&gt;bmiHeader.biHeight; 
    // Set biClrImportant to 0, indicating that all of the 
    // device colors are important. 
     pbmi-&gt;bmiHeader.biClrImportant = 0; 
     return pbmi; 
 } 

void CreateBMPFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi, 
                  HBITMAP hBMP, HDC hDC) 
 { 
    HANDLE hf;                 // file handle 
    BITMAPFILEHEADER hdr;       // bitmap file-header 
    PBITMAPINFOHEADER pbih;     // bitmap info-header 
    LPBYTE lpBits;              // memory pointer 
    DWORD dwTotal;              // total count of bytes 
    DWORD cb;                   // incremental count of bytes 
    BYTE *hp;                   // byte pointer 
    DWORD dwTmp; 

    pbih = (PBITMAPINFOHEADER) pbi; 
    lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih-&gt;biSizeImage);

    if (!lpBits) 
	{}

    // Retrieve the color table (RGBQUAD array) and the bits 
    // (array of palette indices) from the DIB. 
    if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih-&gt;biHeight, lpBits, pbi, 
        DIB_RGB_COLORS)) 
    {}

    // Create the .BMP file. 
    hf = CreateFile(pszFile, 
                   GENERIC_READ | GENERIC_WRITE, 
                   (DWORD) 0, 
                    NULL, 
                   CREATE_ALWAYS, 
                   FILE_ATTRIBUTE_NORMAL, 
                   (HANDLE) NULL); 
    if (hf == INVALID_HANDLE_VALUE) 
	{}
    hdr.bfType = 0x4d42;        // 0x42 = &quot;B&quot; 0x4d = &quot;M&quot; 
    // Compute the size of the entire file. 
    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + 
                 pbih-&gt;biSize + pbih-&gt;biClrUsed 
                 * sizeof(RGBQUAD) + pbih-&gt;biSizeImage); 
    hdr.bfReserved1 = 0; 
    hdr.bfReserved2 = 0; 

    // Compute the offset to the array of color indices. 
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + 
                    pbih-&gt;biSize + pbih-&gt;biClrUsed 
                    * sizeof (RGBQUAD); 

    // Copy the BITMAPFILEHEADER into the .BMP file. 
    if (!WriteFile(hf, (LPVOID) &amp;hdr, sizeof(BITMAPFILEHEADER), 
        (LPDWORD) &amp;dwTmp,  NULL)) 
    {

    }

    // Copy the BITMAPINFOHEADER and RGBQUAD array into the file. 
    if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER) 
                  + pbih-&gt;biClrUsed * sizeof (RGBQUAD), 
                  (LPDWORD) &amp;dwTmp, ( NULL)))
	{}

    // Copy the array of color indices into the .BMP file. 
    dwTotal = cb = pbih-&gt;biSizeImage; 
    hp = lpBits; 
    if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &amp;dwTmp,NULL)) 
	{}

    // Close the .BMP file. 
     if (!CloseHandle(hf)) 
	 {}

    // Free memory. 
    GlobalFree((HGLOBAL)lpBits);
}

HBITMAP ManipulateBitmap( LPCWSTR _file) 
{ 
    DWORD _width, _height; 
    HBITMAP _bitmap, DestBitmap; 
    HBITMAP newBitmap=NULL; 

    if(!_file) return NULL; 

    _bitmap= (HBITMAP)LoadImage(0,_file,IMAGE_BITMAP, 0, 0,  
                 LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);   

    if(!_bitmap) return NULL; 

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

    _width=bm.bmWidth; 
    _height=bm.bmHeight; 

    DestBitmap=CreateBitmapIndirect(&amp;bm); 

    if(!_bitmap) return NULL; 

    HDC SrcDC=CreateCompatibleDC(NULL);; 
    SelectObject(SrcDC,_bitmap); 

	HDC DestDC=CreateCompatibleDC(NULL);; 
    SelectObject(DestDC,DestBitmap); 

	//Einfach nur die Pixel Kopieren
    DWORD col1; 
    for(DWORD y=0; y&lt;_height; y++) 
	{
        for(DWORD x=0; x&lt;_width; x++) 
        { 
			col1=GetPixel(SrcDC,x,y); 
			byte r,g,b;
			r=GetRValue(col1);
			g=GetGValue(col1);
			b=GetBValue(col1);

            SetPixel(DestDC,x,y,RGB(r,g,b)); 
        } 
	}

    DeleteDC(DestDC); 
    DeleteDC(SrcDC); 
    DeleteObject(_bitmap); 

    return DestBitmap; 
}
</code></pre>
<p>Ich rufe es folgendermaßen auf:<br />
HBITMAP h=ManipulateBitmap(L&quot;1.bmp&quot;);</p>
<p>CreateBMPFile(g_window-&gt;hWnd,L&quot;test.bmp&quot;,CreateBitmapInfoStruct(g_window-&gt;hWnd,h),h,g_window-&gt;hDC);</p>
<p>Weiß Jemand was schief läuft?<br />
(Die Methoden CreateBMPFile(...) und CreateBitmapInfoStruct(...) habe ich von der Microsoft Seite übernommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356842</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Sat, 01 Sep 2007 15:13:26 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 15:36:58 GMT]]></title><description><![CDATA[<p>Also ich habe den fehler eingegerenzt und er ist mit Sicherheit in ManipulateBitmap</p>
<p>Weiß Jemand was dort falsch ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356851</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Sat, 01 Sep 2007 15:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 15:43:32 GMT]]></title><description><![CDATA[<p>Also, ich bin mir jetzt ziemlich sicher, das dies nicht funktioniert:</p>
<pre><code class="language-cpp">//Einfach nur die Pixel Kopieren
    DWORD col1; 
    for(DWORD y=0; y&lt;_height; y++) 
	{
        for(DWORD x=0; x&lt;_width; x++) 
        { 
			col1=GetPixel(SrcDC,x,y); 
			byte r,g,b;
			r=GetRValue(col1);
			g=GetGValue(col1);
			b=GetBValue(col1);

            SetPixel(DestDC,x,y,RGB(r,g,b)); 
        } 
	}
</code></pre>
<p>Weiß Jemand wo hier der Fehler ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356858</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Sat, 01 Sep 2007 15:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Sat, 01 Sep 2007 16:41:36 GMT]]></title><description><![CDATA[<p>Prüf den Rückgabewert von GetPixel doch mal auf CLR_INVALID und auch den Rückgabewert von SetPixel <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/1356902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356902</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 01 Sep 2007 16:41:36 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmap laden =&amp;gt; speichern on Wed, 05 Sep 2007 10:01:06 GMT]]></title><description><![CDATA[<p>Hallo, ich habe jetzt endgültig die Zeilen gefunden, die nicht funktionieren:</p>
<pre><code class="language-cpp">DestBitmap=CreateBitmapIndirect(&amp;bm); 

    if(!_bitmap) return NULL; 

    HDC SrcDC=CreateCompatibleDC(NULL);; 
    SelectObject(SrcDC,_bitmap); 

    HDC DestDC=CreateCompatibleDC(NULL);; 
    SelectObject(DestDC,DestBitmap);
</code></pre>
<p>denn wenn ich</p>
<pre><code class="language-cpp">SetPixel(ScrDC,x,y,RGB(r,g,b));
</code></pre>
<p>anstatt</p>
<pre><code class="language-cpp">SetPixel(DestDC,x,y,RGB(r,g,b));
</code></pre>
<p>benutze geht es.</p>
<p>Warum funktioniert das kopieren der Bitmap so nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359275</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Wed, 05 Sep 2007 10:01:06 GMT</pubDate></item></channel></rss>