Re: How to export my memDC to a *.bmp file directly
Hi Ray,
u do it so:
greetings and regards,
Karsten Schulz
(www.kahnsoft.de)
BITMAP bitmap;
if(!::GetObject ((HBITMAP)hBmp, sizeof (bitmap), &bitmap))
return false;
if(!bitmap.bmBits)
return false; //ur HBITMAP has not a DibSection
SelectObject( &CBitmap::m_mymember) u must do
PBITMAPINFO pBitmapInfo = (BITMAPINFO*)(new
char[sizeof(BITMAPINFOHEADER)+(bitmap.bmBitsPixel==8?256:1)*sizeof(RGBQUAD)]);
if(!pBitmapInfo)
return false;
m_pBitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_pBitmapInfo->bmiHeader.biWidth = (m_srcw=bitmap.bmWidth);
m_pBitmapInfo->bmiHeader.biHeight =
(m_srch=bitmap.bmHeight);//botomup
m_pBitmapInfo->bmiHeader.biPlanes = bitmap.bmPlanes;
m_pBitmapInfo->bmiHeader.biBitCount = bitmap.bmBitsPixel;
m_pBitmapInfo->bmiHeader.biCompression = BI_RGB;
m_pBitmapInfo->bmiHeader.biSizeImage =
(bitmap.bmWidth*bitmap.bmHeight*(bitmap.bmBitsPixel>>3));
m_pBitmapInfo->bmiHeader.biXPelsPerMeter = 0;
m_pBitmapInfo->bmiHeader.biYPelsPerMeter = 0;
m_pBitmapInfo->bmiHeader.biClrUsed = bitmap.bmBitsPixel==8?256:0;
m_pBitmapInfo->bmiHeader.biClrImportant = 0;
Save("c:\\otto.bmp",bitmap.bmBits);
//save a bmp file from Dib
bool CDib::Save(LPCSTR fname,LPVOID pMem)
{
CString path(fname);
if(path.IsEmpty())
return false;
HANDLE hf;
BITMAPFILEHEADER hdr;
int tmp;
hf = CreateFile(path.GetBuffer(0),
GENERIC_READ | GENERIC_WRITE,
(DWORD) 0,
(LPSECURITY_ATTRIBUTES) NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
if (hf == INVALID_HANDLE_VALUE)
return false;
hdr.bfType = 0x4d42;
hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +
m_pBitmapInfo->bmiHeader.biSize + m_pBitmapInfo->bmiHeader.biClrUsed *
sizeof(RGBQUAD) +
m_pBitmapInfo->bmiHeader.biSizeImage);
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +
m_pBitmapInfo->bmiHeader.biSize +
m_pBitmapInfo->bmiHeader.biClrUsed * sizeof (RGBQUAD);
if(!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),(LPDWORD)
&tmp, (LPOVERLAPPED) NULL))
{
CloseHandle(hf);
return false;
}
if(!WriteFile(hf, (LPVOID) &m_pBitmapInfo->bmiHeader,
sizeof(BITMAPINFOHEADER) + m_pBitmapInfo->bmiHeader.biClrUsed * sizeof
(RGBQUAD),(LPDWORD) &tmp, (LPOVERLAPPED) NULL))
{
CloseHandle(hf);
return false;
}
if(!WriteFile(hf, (LPCVOID) pMem,
m_pBitmapInfo->bmiHeader.biSizeImage,(LPDWORD) &tmp, (LPOVERLAPPED) NULL) )
{
CloseHandle(hf);
return false;
}
CloseHandle(hf);
return true;
}
"Ray" <rguan@trafficcast.com.cn> schrieb im Newsbeitrag
news:8F643D10-C5CD-4B68-8F00-001D166DD9EA@microsoft.com...
Hi, all
dose anybody know how to export my h_memDC to a bmp file ?
I dont want the sourcecode i just want to know how many steps to do that,
thanks in advance.
I have a map stored in memdc, i dont want to display it to the view, I
just want to export it to a bmp file directly. so , what can i do ?
Best regards,
Ray