http://www.codeguru.com/bitmap/bitmap_to_file.shtml
http://www.codeguru.com/bitmap/window_to_file.shtml
http://www.codeguru.com/bitmap/pixel_access.shtml
http://www.codeguru.com/bitmap/window_to_file.shtml
http://www.codeguru.com/bitmap/pixel_access.shtml
解决方案 »
- 救命呀!!!在线等~~数据库一个关于CTime赋值的问题
- 菜鸟提问:UpdateAllViews(NULL)与UpdateAllViews(this)的区别
- 操作系统的虚拟地址和物理地址的问题,望高手回答
- LPSTR和LPCTSTR的作用是什么
- 欢迎加入Open3D游戏引擎开发小组,主页http://Open3D.126.com
- 500分的问题,急用!!!怎样结束如下的一个线程
- 高手指点一下,怎样才能抢占登陆界面!
- 请问ocx控件如何使用
- Gina的问题
- 怎样使Win98下的程序(如VC)不经过重装就能在Win2000下使用?
- 如何保证打印机输出固定长度的线条
- 急问!!!!!!!!在vc++ 中使用ado连接数据库中如何删除表中字段?
其中只有三位用来存储RGB三种颜色。你可以用把它强制的付给RGBQUAD的变量。
就可以轻松的获得RGB三种颜色了。
《Windows 程序设计》的第十五章吧!
BOOL SaveDIB(HDIB hDib, LPCTSTR lpFileName)
{
BITMAPFILEHEADER bmfHdr;
LPBITMAPINFOHEADER lpBI;
HANDLE fh;
DWORD dwDIBSize;
DWORD dwWritten;
if (!hDib)
return FALSE;
fh = CreateFile(lpFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE)
return FALSE;
lpBI = (LPBITMAPINFOHEADER)GlobalLock(hDib);
if (!lpBI)
{
CloseHandle(fh);
return FALSE;
}
if (lpBI->biSize != sizeof(BITMAPINFOHEADER))
{
GlobalUnlock(hDib);
CloseHandle(fh);
return FALSE;
}
bmfHdr.bfType = DIB_HEADER_MARKER;
dwDIBSize = *(LPDWORD)lpBI + PaletteSize((LPBYTE)lpBI);
if ((lpBI->biCompression == BI_RLE8) || (lpBI->biCompression == BI_RLE4))
dwDIBSize += lpBI->biSizeImage;
else
{
DWORD dwBmBitsSize;
dwBmBitsSize = WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) *
lpBI->biHeight;
dwDIBSize += dwBmBitsSize;
lpBI->biSizeImage = dwBmBitsSize;
}
bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize +
PaletteSize((LPBYTE)lpBI);
WriteFile(fh, (LPBYTE)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
WriteFile(fh, (LPBYTE)lpBI, dwDIBSize, &dwWritten, NULL);
GlobalUnlock(hDib);
CloseHandle(fh);
if (dwWritten == 0)
return FALSE;
else
return TRUE;
}