像 GetDIBits GetBitmapBits 之类的函数都是需要重新分配一块内存,再把图像数据拷贝到这个快内存的,但是一个位图如果已经被加载(句柄不为0),那么他肯定是已经在内存中分配了相关的数据的,有没有那个函数能直接获得这个地址呢?
解决方案 »
- 如何将CString字符串快速转换为十六进制的字符串?最好是系统函数。
- 请教关于VC操作EXCEL的问题,重分酬谢
- 图标问题
- 学习过《windows程序设计》(上册)的请看过来
- 谁知道北京哪里有好的日语培训学校?
- 会VC的朋友请进!帮忙UP也一定送分!
- 组件借用ado访问数据库
- 我想最小化我的基于对话框的程序到有音量调节的任务栏,应该怎么办?
- 声音按钮,请问如何与系统托盘的小喇叭图标对应起来
- 我的DCom/ActiveX EXE在中间层(控件)服务器上手工注册并手工配置DComcnfg后能成功运行,我能否写代码让ActiveX ExE自动注册,并自动配置DComcnfg(因为让客户做这两步比较麻烦)
- 如何在点击按钮时,鼠标未弹起之前增加一个事件处理?
- 有没有VC可用的好的绘制工具或控件
::GetObject(hCaptureBitmap,sizeof(bm),(LPVOID)&bm); 用上面的函数,在有些情况下bm的bmBits返回值为0。
hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
后移43位即可
hSkinBmp = (HBITMAP)LoadImage(0, "skin01.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);如果没有:
LR_LOADFROMFILE | LR_CREATEDIBSECTION
“用上面的函数,在有些情况下bm的bmBits返回值为0。”
这个已经解释的清楚了。BITMAP在系统里面总得来说分为两种,设备相关,设备无关。
从文件读取的和通过CreateDIBSection函数创建的位图为设备无关的,这些位图可以用GetObject函数取得Bit数组的内存地址。
但是通过DC获得的BITMAP是设备相关的,通过GetObject函数只能取到位图的H,W,颜色信息,其他的信息通过常规方法应该是取不到的。