Bilder als bmp wegschreiben!!



  • Hallo,
    ich habe ein Problem beim wegschreiben von Bilder hier die Funktion

    WriteBitmap("C:\\Datei1.bmp",(HBITMAP) bitmap,*pDC);
    

    So funktioniert alles nur wenn ich

    CSting test ="C:\\Datei2.bmp";
    

    in

    WriteBitmap(test,(HBITMAP) bitmap,*pDC);
    

    einfüge geht das leider nicht warum weis ich nicht bitte um Hilfe!!!

    bool CViewerDlg::WriteBitmap(LPTSTR szFile, HBITMAP hbitmap, HDC memdc)
    {
    BITMAP  bmp; 
          if(GetObject(hbitmap, sizeof(BITMAP), &bmp)) 
          { 
            BITMAPINFOHEADER BmpInfoHdr; 
         BITMAPFILEHEADER BmpFileHdr; 
             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; 
            bmp.bmBits = (void*)GlobalAlloc(GMEM_FIXED, BmpInfoHdr.biSizeImage); 
            if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits, (BITMAPINFO*)&BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight) 
            { 
                HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); 
                if(hFile != INVALID_HANDLE_VALUE)  { 
                DWORD dwTmp; 
                WriteFile(hFile, &BmpFileHdr, sizeof(BITMAPFILEHEADER), &dwTmp, NULL); 
                WriteFile(hFile, &BmpInfoHdr, sizeof(BITMAPINFOHEADER), &dwTmp, NULL); 
                WriteFile(hFile, bmp.bmBits,  BmpInfoHdr.biSizeImage,   &dwTmp, NULL); 
            } 
            CloseHandle(hFile); 
        } 
        GlobalFree(bmp.bmBits); 
        return TRUE; 
      } 
      return FALSE; 
    }
    


  • Versuch es mal so

    CSting test ="C:/Datei2.bmp";
    


  • hi,
    ne das geht leider auch nicht



  • Ist nur eine Kleinigkait aber hast Du CSting in deinem Programm stehen oder CString
    eigentlich muesste die von Dir aufgefuehrte variante funzen denke ich...
    Helge.



  • test.GetBuffer(...) beim Aufruf von WriteBitmap(...) sollte klappen, der gibt ein LPTSTR zurück.
    Und test.ReleaseBuffer nicht vergessen.



  • hallo,
    wie geht das bin new in VC++ bitte mit BSP



  • Ich habe noch einen Fehler bei Dir entdeckt:

    BmpInfoHdr.biSizeImage = bmp.bmWidth*bmp.bmHeight*3;

    Die Zeile muß immer durch 4 teilbar sein, dadurch verändert sich dann auch die Größe der Image-Size. Besser wäre:

    BmpInfoHdr.biSizeImage = ((((bmp.bmWidth * BmpInfoHdr.biBitCount) + 31) & ~31) >> 3) * bmHeight;



  • Wozu das GENERIC_READ?


Anmelden zum Antworten