• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 74, 文章 - 0, 評論 - 26, 引用 - 0
            數(shù)據(jù)加載中……

            Write HBITMAP Object in to BMP File 轉

            void WriteBMPFile(HBITMAP bitmap, LPTSTR filename, HDC hDC)
            {
            BITMAP bmp;
            PBITMAPINFO pbmi;
            WORD cClrBits;
            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;

            // create the bitmapinfo header information

            if (!GetObject( (bitmap, sizeof(BITMAP), (LPSTR)&bmp)){
            AfxMessageBox("Could not retrieve bitmap info");
            return;
            }

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

            // Allocate memory for the BITMAPINFO structure.
            if (cClrBits != 24)
            pbmi = (PBITMAPINFO) LocalAlloc(LPTR,
            sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * (1<< cClrBits));
            else
            pbmi = (PBITMAPINFO) LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER));

            // Initialize the fields in the BITMAPINFO structure.

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

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

            // Compute the number of bytes in the array of color
            // indices and store the result in biSizeImage.
            pbmi->bmiHeader.biSizeImage = (pbmi->bmiHeader.biWidth + 7) /8 * pbmi->bmiHeader.biHeight * cClrBits;
            // Set biClrImportant to 0, indicating that all of the
            // device colors are important.
            pbmi->bmiHeader.biClrImportant = 0;

            // now open file and save the data
            pbih = (PBITMAPINFOHEADER) pbmi;
            lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);

            if (!lpBits) {
            AfxMessageBox("writeBMP::Could not allocate memory");
            return;
            }

            // Retrieve the color table (RGBQUAD array) and the bits
            if (!GetDIBits(hDC, HBITMAP(bitmap), 0, (WORD) pbih->biHeight, lpBits, pbmi,
            DIB_RGB_COLORS)) {
            AfxMessageBox("writeBMP::GetDIB error");
            return;
            }

            // Create the .BMP file.
            hf = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, (DWORD) 0,
            NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
            (HANDLE) NULL);
            if (hf == INVALID_HANDLE_VALUE){
            AfxMessageBox("Could not create file for writing");
            return;
            }
            hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M"
            // Compute the size of the entire file.
            hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +
            pbih->biSize + pbih->biClrUsed
            * sizeof(RGBQUAD) + pbih->biSizeImage);
            hdr.bfReserved1 = 0;
            hdr.bfReserved2 = 0;

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

            // Copy the BITMAPFILEHEADER into the .BMP file.
            if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
            (LPDWORD) &dwTmp, NULL)) {
            AfxMessageBox("Could not write in to file");
            return;
            }

            // Copy the BITMAPINFOHEADER and RGBQUAD array into the file.
            if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
            + pbih->biClrUsed * sizeof (RGBQUAD),
            (LPDWORD) &dwTmp, ( NULL))){
            AfxMessageBox("Could not write in to file");
            return;
            }


            // Copy the array of color indices into the .BMP file.
            dwTotal = cb = pbih->biSizeImage;
            hp = lpBits;
            if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL)){
            AfxMessageBox("Could not write in to file");
            return;
            }

            // Close the .BMP file.
            if (!CloseHandle(hf)){
            AfxMessageBox("Could not close file");
            return;
            }

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

            posted on 2009-02-16 11:32 井泉 閱讀(1203) 評論(2)  編輯 收藏 引用

            評論

            # re: Write HBITMAP Object in to BMP File 轉  回復  更多評論   

            結果是什么
            2010-03-09 16:12 | nfl 2010

            # re: Write HBITMAP Object in to BMP File 轉  回復  更多評論   

            I have the functions to check if there is an image on the clipboard and to get the HBITMAP data of that image. Now I only have one question: How can I save, in C++, an HBITMAP structure into a Bitmap file on the computer?
            2011-04-20 18:36 | Human Health
            久久WWW免费人成—看片| 国产精品亚洲综合久久 | 嫩草伊人久久精品少妇AV| 亚洲狠狠婷婷综合久久蜜芽| 久久国产精品无码一区二区三区| 久久精品草草草| 亚洲人成电影网站久久| 99久久精品午夜一区二区| 久久本道综合久久伊人| 精品国产乱码久久久久久1区2区| 久久99精品久久久久久野外| 欧美亚洲色综久久精品国产| 国产免费久久久久久无码| 久久久婷婷五月亚洲97号色| 精品久久久久久久久久久久久久久| 精品久久人人爽天天玩人人妻| 国产精品狼人久久久久影院| 久久人人爽人人爽人人AV东京热| 久久www免费人成精品香蕉| 72种姿势欧美久久久久大黄蕉| 亚洲午夜精品久久久久久app| 中文精品久久久久国产网址 | 99久久久精品免费观看国产| 亚洲一区精品伊人久久伊人| 99久久免费国产精品| 久久99国产精品尤物| 人妻无码αv中文字幕久久琪琪布| 久久精品国产亚洲Aⅴ香蕉| 91精品日韩人妻无码久久不卡| 国内精品久久久久影院优| 99久久这里只精品国产免费| 热久久最新网站获取| 色综合久久中文字幕综合网| 久久久久亚洲精品无码网址| 久久精品国产亚洲AV不卡| 精品久久久久久无码中文字幕 | 伊人久久大香线蕉亚洲五月天| 亚洲国产精品成人久久蜜臀| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 色综合久久精品中文字幕首页 | 激情综合色综合久久综合|