(转)如何将HBITMAP类型转化为CMemFile对象?
来源:互联网 发布:足球鞋钉分类知乎 编辑:程序博客网 时间:2024/06/03 23:50
HANDLE CBmp2Avi::Bitmap2Dib( HBITMAP hbitmap, UINT bits )
{
HANDLE hdib ;
HDC hdc ;
BITMAP bitmap ;
UINT wLineLen ;
DWORD dwSize ;
DWORD wColSize ;
LPBITMAPINFOHEADER lpbi ;
LPBYTE lpBits ;
GetObject(hbitmap,sizeof(BITMAP),&bitmap) ;
wLineLen = (bitmap.bmWidth*bits+31)/32 * 4;
wColSize = sizeof(RGBQUAD)*((bits <= 8) ? 1<<bits : 0);
dwSize = sizeof(BITMAPINFOHEADER) + wColSize +
(DWORD)(UINT)wLineLen*(DWORD)(UINT)bitmap.bmHeight;
hdib = GlobalAlloc(GHND,dwSize);
if (!hdib)
return hdib ;
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib) ;
lpbi->biSize = sizeof(BITMAPINFOHEADER) ;
lpbi->biWidth = bitmap.bmWidth ;
lpbi->biHeight = bitmap.bmHeight ;
lpbi->biPlanes = 1 ;
lpbi->biBitCount = (WORD) bits ;
lpbi->biCompression = BI_RGB ;
lpbi->biSizeImage = dwSize - sizeof(BITMAPINFOHEADER) - wColSize ;
lpbi->biXPelsPerMeter = 0 ;
lpbi->biYPelsPerMeter = 0 ;
lpbi->biClrUsed = (bits <= 8) ? 1<<bits : 0;
lpbi->biClrImportant = 0 ;
lpBits = (LPBYTE)(lpbi+1)+wColSize ;
hdc = CreateCompatibleDC(NULL) ;
GetDIBits(hdc,hbitmap,0,bitmap.bmHeight,lpBits,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
lpbi->biClrUsed = (bits <= 8) ? 1<<bits : 0;
DeleteDC(hdc) ;
GlobalUnlock(hdib);
return hdib ;
}
CMemFile* memF= (CMemFile*)GlobalLock(Bitmap2Dib(hbm, 8));
fanxuehai 于 2005-5-11 21:02:38
多谢howtotell(从何谈起)的指点,我用你提供的源码试了一下,编译是通过了的,但一执行就出现“死机”(程序死了)的现象,不知是我在哪里出现偏差?
fanxuehai 于 2005-5-13 16:57:15
谁能帮我解决这个问题啊?急啊。。。
dongfa(一桶江湖) 于 2005-5-13 17:07:48
要new CMemFile
CMemFile* memF = new CMemFile(GlobalLock(Bitmap2Dib(hbm, 8)));
bobob(静思--潜心研究PDF) 于 2005-5-13 17:13:49
指定memfile的size
就是上面函数中的dwSize
fanxuehai 于 2005-5-13 18:28:11
还是没能有问题啊!
fanxuehai 于 2005-5-13 19:46:46
有一点我就不明白:GlobalLock返回值类型为void,将它强制转化为CMemFile型,这样这个能将位图内容存进内存文件(CMemFile对象)吗?
fanxuehai 于 2005-5-13 20:04:02
我刚才测试了一下,用CMemFile* memF= new CMemFile((int)GlobalLock(Bitmap2Dib(hBitmap, 8)))得到的memF文件的长度为0,内存文件为空,这是什么原因呢?敬请指教!
dongfa(一桶江湖) 于 2005-5-13 20:09:26
HANDLE hData = Bitmap2Dib(hBitmap, 8);
UINT nSize = GlobalSize(hData);
CMemFile* memF= new CMemFile((BYTE *)GlobalLock(hData), nSize);
fanxuehai 于 2005-5-15 17:59:28
谢谢大家!:) http://www.bokebb.com/dev/cn/vc/arithmetic/20055245010_3999005.shtml
- (转)如何将HBITMAP类型转化为CMemFile对象?
- 将HBITMAP类型转换为BITMAP结构
- 如何将json对象转化为字符串?
- 如何将Object类型转化为int类型
- 如何将Jason中的NSString类型转化为NSArray类型
- 一个对象类型的数据如何转化为String类型
- ParcelableGenerator将任意对象转化为Parcelable类型
- Java7中如何将Object对象转化为int对象
- 如何将 rapidjson::Value 转化为string类型
- MFC中如何将CString转化为char类型
- go语言如何将时间转化为字符串String类型
- javascript中如何将对象转化为json字符串?
- 将对象转化为DataTable
- 将对象转化为字符串
- 将HBITMAP保存为文件
- 将String类型转化为Date类型
- win32下handle转化为HBITMAP
- 将JSON对象转化为实体对象
- 必须学会配合
- 还没开始学习呢--计划前奏
- 空虚
- upload file
- 使用反向传播训练神经网络
- (转)如何将HBITMAP类型转化为CMemFile对象?
- SUSE Linux 修改了websphere 的编码格式为gbk后 对中文的支持也是有问题的解决办法
- 第一次
- 这个replace命令有意思!
- Where storage lives
- Aspect in Middleware--1
- 怎样为你的WEB2.0创业进行营销
- Linux编程之路(初学者)(ZT)
- 菜根谭应酬篇评1 -- by zero