--- mstools/samples/mandel/savebmp.c 2018/08/09 18:21:38 1.1.1.2 +++ mstools/samples/mandel/savebmp.c 2018/08/09 18:23:42 1.1.1.3 @@ -18,12 +18,10 @@ * #include "jtypes.h" * \**************************************************************************/ -//#define STRICT -//#define MYERROR 1 #include #include "jtypes.h" - +extern HPALETTE ghPal; extern HWND ghwndMain; extern char gtext[256]; BOOL SaveBitmapFile(HDC, HBITMAP, PSTR); @@ -57,14 +55,13 @@ BOOL SaveBitmapFile(HDC hDC, HBITMAP hBm ULONG sizBMI; -#if MYERROR - sprintf( gtext,"MYERROR\n"); - OutputDebugString( gtext); -#endif - - - bSuccess = TRUE; +#if 0 + if (ghPal) { + SelectPalette(hDC, ghPal, FALSE); + RealizePalette(hDC); + } +#endif if (!hBmp) { MessageBox(ghwndMain, "There's no Bitmap to save!", "Error", MB_OK); return FALSE; @@ -97,8 +94,26 @@ BOOL SaveBitmapFile(HDC hDC, HBITMAP hBm // allocate memory for retrieving that. Otherwise, we do. // pbmi = &bmi; // assume no color table - if (bmi.bmiHeader.biBitCount != 24) { // has color table - sizBMI = sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(1<bmiHeader.biSize = bmi.bmiHeader.biSize; - pbmi->bmiHeader.biWidth = bmi.bmiHeader.biWidth; - pbmi->bmiHeader.biHeight = bmi.bmiHeader.biHeight; - pbmi->bmiHeader.biPlanes = bmi.bmiHeader.biPlanes; - pbmi->bmiHeader.biBitCount = bmi.bmiHeader.biBitCount; - pbmi->bmiHeader.biCompression = bmi.bmiHeader.biCompression; - pbmi->bmiHeader.biSizeImage = bmi.bmiHeader.biSizeImage; - pbmi->bmiHeader.biXPelsPerMeter = bmi.bmiHeader.biXPelsPerMeter; - pbmi->bmiHeader.biYPelsPerMeter = bmi.bmiHeader.biYPelsPerMeter; - pbmi->bmiHeader.biClrUsed = bmi.bmiHeader.biClrUsed; - pbmi->bmiHeader.biClrImportant = bmi.bmiHeader.biClrImportant; -#endif - // // Now that we've a bigger chunk of memory, let's copy the Bitmap // info header data over // pjTmp = (PBYTE)pbmi; pjTmpBmi = (PBYTE)&bmi; - sizBMI = sizeof(BITMAPINFOHEADER); + sizTmp = sizeof(BITMAPINFOHEADER); - while(sizBMI--) + while(sizTmp--) { *(((PBYTE)pjTmp)++) = *((pjTmpBmi)++); } - } // @@ -150,13 +150,11 @@ BOOL SaveBitmapFile(HDC hDC, HBITMAP hBm // But first, fill in the info for the BitmapFileHeader // bfh.bfType = 0x4D42; // 'BM' - bfh.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)* - ((pbmi->bmiHeader.biBitCount == 24) ? 0 : (1<bmiHeader.biBitCount))+ + bfh.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizBMI+ pbmi->bmiHeader.biSizeImage; bfh.bfReserved1 = bfh.bfReserved2 = 0; - bfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ - sizeof(RGBQUAD)*((pbmi->bmiHeader.biBitCount == 24) ? 0 : (1<bmiHeader.biBitCount)); + bfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizBMI; // // Write out the file header now @@ -183,14 +181,12 @@ BOOL SaveBitmapFile(HDC hDC, HBITMAP hBm MessageBox(ghwndMain, "Failed in creating bitmap!", "Error", MB_OK); bSuccess = FALSE; goto ErrExit3; - } // // Now write out the BitmapInfoHeader and color table, if any // - if (_lwrite(hFile, (LPSTR)pbmi, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * - ((pbmi->bmiHeader.biBitCount == 24) ? 0 : (1 << pbmi->bmiHeader.biBitCount))) == -1) { + if (_lwrite(hFile, (LPSTR)pbmi, sizBMI) == -1) { MessageBox(ghwndMain, "Failed in WriteFile!", "Error", MB_OK); bSuccess = FALSE; goto ErrExit4; @@ -205,6 +201,7 @@ BOOL SaveBitmapFile(HDC hDC, HBITMAP hBm goto ErrExit4; } + ErrExit4: SelectObject(hDC, hBmpOld); DeleteObject(hTmpBmp);