BITMAP gestaucht speichern
-
Hi zusammen,
ich lade ein Bitmap und will dieses nun stauchen und dann abspeichern. ALso wie man das Bitmap direkt abspeichert habe ich hinbekommen, und wie man es gestaucht darstellt üver "StretchBlt" auch.
nur, wie kann ich z,b. dann von
pDC->StretchBlt( 0, 0, 180, 178, &imageDC, 0, 0, bild_header.bmWidth, bild_header.bmHeight-220, SRCCOPY);
das nun abspeichern. Danke für einen Tip.
-
Wenn du VC++7 verwendest ist es ganz leicht Eine Variable Vin CImage anlegen,Bitmap reinkopieren, speichern fertig.
CImage pic; pic.Attach(imageDc); pic.Save("C:\dahinsolls\soheissts.bmp");
Ohne CImage wirds ne arge Krise
-
HI
danke für deine Antwort, leider bin ich noch nicht so up to date dein Vorschlag klappt nicht. Aber evtl. komme ich drauf zurück, werde demnächst auf Net umstellen.
Habe das Speichern Problem so wie da unten gelöst, kann da aber dann nur das BITMAP nutzen, würde das gerne über das imagedc machen ?????BOOL CMainDlgII::WriteBitmap(LPTSTR szFile, HBITMAP hbitmap, HDC memdc) { BITMAP bmp; //Informationen über die übergebene Bitmap sammeln, bmp ist der Zielpuffer der Infos if(GetObject(hbitmap, sizeof(BITMAP), &bmp)) { BITMAPINFOHEADER BmpInfoHdr; //Struktur für Bitmap-Infoheader BITMAPFILEHEADER BmpFileHdr; //Struktur für Bitmap-Dateiheader //jetzt werden die gesammlten Infos in bmp ausgewertet und in die Strukts umgeschrieben BmpInfoHdr.biSize = sizeof(BITMAPINFOHEADER); BmpInfoHdr.biWidth = bmp.bmWidth ; BmpInfoHdr.biHeight = bmp.bmHeight; BmpInfoHdr.biPlanes = bmp.bmPlanes; BmpInfoHdr.biBitCount = 24; BmpInfoHdr.biCompression = BI_RGB; BmpInfoHdr.biSizeImage = bmp.bmWidth*bmp.bmHeight*3 ; BmpFileHdr.bfType = 0x4d42; BmpFileHdr.bfReserved1 = 0; BmpFileHdr.bfReserved2 = 0; BmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); BmpFileHdr.bfSize = BmpFileHdr.bfOffBits+BmpInfoHdr.biSizeImage ; //Heap-Speicher für die ins DIB-Format zu konvertierende Bitmap organisieren bmp.bmBits = (void*)GlobalAlloc(GMEM_FIXED, BmpInfoHdr.biSizeImage); //Bitmap ins DIB-Format umwandeln, wenn erfolgreich wird die DIB geschrieben if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits, (BITMAPINFO*)&BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight) { //Datei erzeugen über Win-API (ist performanter als fstream-Funktionen) HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); //Datei erzeugen erfolgreich? if(hFile != INVALID_HANDLE_VALUE) { //hier wird die Anzahl der geschriebenen Bytes abgelegt, aber nicht ausgewertet DWORD dwTmp; //Bitmap-Dateiheader schreiben WriteFile(hFile, &BmpFileHdr, sizeof(BITMAPFILEHEADER), &dwTmp, NULL); //Bitmap-Infoheader schreiben WriteFile(hFile, &BmpInfoHdr, sizeof(BITMAPINFOHEADER), &dwTmp, NULL); //Bitmap-Pixeldaten schreiben WriteFile(hFile, bmp.bmBits, BmpInfoHdr.biSizeImage, &dwTmp, NULL); } //Datei schliessen CloseHandle(hFile); } //Heapspeicher freigeben GlobalFree(bmp.bmBits); return TRUE; } //Nicht erfolgreich gewesen, leider leider ... return FALSE; }
P.S. Die Funkton ist aus irdendnem Forum!!