-
Windows Mobile 에서 DC를 Bitmap 저장공장 이야기 2009. 9. 21. 16:04
어디서 가지고 온지는 기억이 안남...,ㅡ,ㅡ;;;
_SaveBitmap(HDC dcSave, HBITMAP bmSave, LPTSTR pszFileName)
{
BITMAP bmpSave = { 0, };
BITMAPINFO bmiSave = { 0, };
BITMAPFILEHEADER hdrSave = { 0, };
DWORD dwByteCount = 0;
void* pBuffer = NULL;
HDC dcDest = NULL;
HBITMAP bmDest = NULL;
HBITMAP bmDestOld = NULL;
HANDLE hFile = NULL;if(NULL == bmSave)
return FALSE;
if(NULL == dcSave)
return FALSE;::GetObject(bmSave, sizeof(BITMAP), &bmpSave);
bmiSave.bmiHeader.biHeight = bmpSave.bmHeight;
bmiSave.bmiHeader.biWidth = bmpSave.bmWidth;
bmiSave.bmiHeader.biPlanes = 1;
bmiSave.bmiHeader.biBitCount = 24;
bmiSave.bmiHeader.biSize = sizeof(bmiSave.bmiHeader);
bmiSave.bmiHeader.biSizeImage = ((bmiSave.bmiHeader.biWidth + 3) & (~3)) * bmiSave.bmiHeader.biHeight * bmiSave.bmiHeader.biBitCount / 8;
bmiSave.bmiHeader.biXPelsPerMeter = 3780;
bmiSave.bmiHeader.biYPelsPerMeter = 3780;bmDest = ::CreateDIBSection(dcSave, &bmiSave, DIB_RGB_COLORS, (void**)&pBuffer, NULL, 0);
// bitmap 복사하는 곳. 빼면 저장 안됨.
dcDest = ::CreateCompatibleDC(dcSave);
bmDestOld = (HBITMAP)::SelectObject(dcDest, bmDest);
::BitBlt(dcDest, 0, 0, bmpSave.bmWidth, bmpSave.bmHeight, dcSave, 0, 0, SRCCOPY);
::SelectObject(dcDest, bmDestOld);
::DeleteDC(dcDest);hFile = ::CreateFile(pszFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
hdrSave.bfType = ((WORD) ('M' << 8) | 'B');
hdrSave.bfSize = sizeof(hdrSave) + sizeof(BITMAPINFOHEADER);
hdrSave.bfReserved1 = 0;
hdrSave.bfReserved2 = 0;
hdrSave.bfOffBits = hdrSave.bfSize;::WriteFile(hFile, &hdrSave, sizeof(hdrSave), &dwByteCount, NULL);
::WriteFile(hFile, &bmiSave.bmiHeader, sizeof(bmiSave.bmiHeader), &dwByteCount, NULL);
::WriteFile(hFile, pBuffer, bmiSave.bmiHeader.biSizeImage, &dwByteCount, NULL);::CloseHandle(hFile);
}::DeleteObject(bmDest);
bmDest = NULL;return TRUE;
}'공장 이야기' 카테고리의 다른 글
SIP 설정하기 (0) 2009.10.12 자주 사용하는 메크로... (0) 2009.09.30 Windows Mobile에서 유니코드 변환 (0) 2009.09.29 위피에서 lrotl, lrotr 구현 (0) 2009.08.12 Windows Mobile에서 PPP 연결... (0) 2009.06.12