读取BMP
来源:互联网 发布:2017一建挂靠前景知乎 编辑:程序博客网 时间:2024/04/29 21:33
近日遇上了一些带alpha通道的bmp文件,于是想如果loadpicture能够正确读取的话,那么使用起AlphaBlend函数就舒服很多了,不需要使用GDI+来读取PNG文件了.
一试之下,发现loadpicture确实能正确读取, 但又因为AlphaBlend似乎有bug(参看AlphaBlend有BUG?),于是唯有自己写代码来进行alpha混合处理了.这里为了偷懒,自然是希望读出来的图片是32bit的,但是loadpicture竟然是根据桌面的显示色深来加载图片的,如果系统是16bit的,它加载得到的图片也是16bit,这样子就比较麻烦了.
于是寻求其他方案,想,api中应该有函数能直接读取bmp的吧.找啊找,终于找到一个CreateDIBSection,原型为,
HBITMAP CreateDIBSection(HDC hdc, // handle to DC
CONST BITMAPINFO *pbmi, // bitmap data
UINT iUsage, // data type indicator
VOID **ppvBits, // bit values
HANDLE hSection, // handle to file mapping object
DWORD dwOffset // offset to bitmap bit values
);
BITMAPINFO可以从bmp文件中获得,位于文件开头,跟在BITMAPFILEHEADER后面,而BITMAPFILEHEADER位于文件开始的地方,vb代码可以这样写
Dim tbfh As BITMAPFILEHEADER
Dim tbh As BITMAPINFOHEADER
Dim tbhi As BITMAPINFO
Open sFile For Binary As 1
Get 1, , tbfh
Get 1, , tbh
Close 1
tbhi.bmiHeader = tbh
tHbmp = CreateDIBSection(CreateCompatibleDC(0), tbhi, 0&, VarPtr(tPtr), 0, 0)
Dim tbh As BITMAPINFOHEADER
Dim tbhi As BITMAPINFO
Open sFile For Binary As 1
Get 1, , tbfh
Get 1, , tbh
Close 1
tbhi.bmiHeader = tbh
tHbmp = CreateDIBSection(CreateCompatibleDC(0), tbhi, 0&, VarPtr(tPtr), 0, 0)
这样就会在内存中创建一个与文件等大小的图像,然后可以直接用文件接下来的数据填充到tPtr对应的内存中即可.
- 读取BMP
- 读取数据 创建BMP
- 读取bmp文件
- java读取BMP图片
- java读取bmp图像文件
- BMP文件的读取
- linux下读取bmp
- 读取BMP文件
- 读取bmp文件
- java读取bmp图像文件
- [易飞]读取BMP错误
- C++ BMP位图读取
- C++读取BMP图像
- C++读取*.bmp文件
- 简易bmp图片读取
- 读取bmp图片代码
- 读取bmp图片
- bmp图像读取
- 祝福
- java中对于复杂对象排序的模型及其实现
- java_note
- 勇往向前的猛士
- EasyJWeb中如何使用Google Guice容器
- 读取BMP
- 关于远程调用(XFire/HttpInvoker/Hessian etc.)及远程服务管理的一些随想
- iBatis框架batch处理优化
- 2007.08.23 爱情真的来临了吗?
- 看《士兵突击》有感
- 数据库的一些概念
- MFC的MVC
- java_lesson
- 加班调程序