圖片操作(二)–儲存DC到BMP檔案 win32

來源:互聯網
上載者:User

畫了一下午的時間總算在mobile上儲存了圖片。

BOOL SaveDcToBMP(HDC m_hdcMem)<br />{<br /> BOOL bReturn = TRUE;<br /> HANDLE hFile = NULL; //handle of bitmap file which will be saved<br /> DWORD dwWritten = 0; //written count<br /> DWORD dwOffsetSize = 0;<br /> DWORD dwBufferSize = 0;<br /> WORD wBitCount = 32; //位元影像中每個像素所佔位元組數<br /> HBITMAP hbitmapSave = NULL;<br /> HBITMAP hbitmapOld = NULL;<br /> HDC hDcDev = NULL;<br /> HDC hDcMem = NULL;<br /> BYTE *pBmpBuffer = NULL;<br /> int iBits = 0;<br /> BITMAP stSrcbmp;<br /> BITMAPINFO srcdibbmap;<br /> BITMAPFILEHEADER bmFileHeader; //位元影像檔案頭結構<br /> SecureZeroMemory(&stSrcbmp, sizeof(BITMAP));<br /> SecureZeroMemory(&srcdibbmap, sizeof(BITMAPINFO));<br /> SecureZeroMemory(&bmFileHeader, sizeof(BITMAPFILEHEADER));<br /> // Fill bitmap information constructor<br /> srcdibbmap.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);<br /> srcdibbmap.bmiHeader.biWidth = WVGA_WIDTH;<br /> srcdibbmap.bmiHeader.biHeight = WVGA_HIGHT;<br /> srcdibbmap.bmiHeader.biPlanes = 1;<br /> srcdibbmap.bmiHeader.biBitCount = wBitCount;<br /> srcdibbmap.bmiHeader.biCompression = BI_RGB;<br /> hDcMem = CreateCompatibleDC(NULL);<br /> if (NULL == hDcMem)<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br /> hbitmapSave = CreateDIBSection(hDcMem, &srcdibbmap, DIB_RGB_COLORS, (void**)&pBmpBuffer, NULL, 0);<br /> if (NULL == hbitmapSave)<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br /> hbitmapOld = (HBITMAP)SelectObject(hDcMem, hbitmapSave);<br /> if (NULL == hbitmapOld)<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br />//將傳進來的DC畫到定義的記憶體DC上去<br /> if(!StretchBlt(hDcMem,<br /> 0,<br /> 0,<br /> WVGA_WIDTH,<br /> WVGA_HIGHT,<br /> m_hdcMem,<br /> 0,<br /> 0,<br /> m_iScaleWidth,<br /> m_iScaleHight,<br /> SRCCOPY))<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }</p><p> if (0 == GetObject(hbitmapSave, sizeof(stSrcbmp), &stSrcbmp))<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br /> dwBufferSize = stSrcbmp.bmWidth * stSrcbmp.bmHeight * wBitCount / 8;<br /> dwOffsetSize = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);<br /> // Fill bitmap header constructor<br /> bmFileHeader.bfType = 0x4D42;<br />bmFileHeader.bfSize = dwOffsetSize + dwBufferSize;<br />bmFileHeader.bfReserved1 = 0;<br />bmFileHeader.bfReserved2 = 0;<br />bmFileHeader.bfOffBits = dwOffsetSize;</p><p> hFile = CreateFile(m_wszPicPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);<br /> if (INVALID_HANDLE_VALUE == hFile)<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br /> if (!WriteFile(hFile, &bmFileHeader, sizeof(BITMAPFILEHEADER), &dwWritten, NULL))<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br /> if (!WriteFile(hFile, &srcdibbmap, sizeof(BITMAPINFO), &dwWritten, NULL))<br />{<br /> bReturn = FALSE;<br />goto Exit;<br />}<br /> if (!WriteFile(hFile, pBmpBuffer, dwBufferSize, &dwWritten, NULL))<br /> {<br /> bReturn = FALSE;<br /> goto Exit;<br /> }<br /> bReturn = TRUE;<br />Exit:<br /> if (INVALID_HANDLE_VALUE != hFile)<br /> {<br /> CloseHandle(hFile);<br /> hFile = INVALID_HANDLE_VALUE;<br /> }<br /> return bReturn;<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.