问题来源:
在usercontrol中,我要根据图片的颜色来设置usercontrol的透明,以实现不规则形状控件。
但是在调用GetBitmapBits之前,给数组分配大小的时候,发现很奇怪的现象。如下所述:图片是24位色彩的图片。
给数组分配大小的时候,按道理,应该是 :
ReDim bmBytes(0 To bm.bmWidthBytes - 1, 0 To bm.bmHeight - 1)
但是使用上面的代码分配大小,获得区域都是扭曲的,逐行向右偏移。比如,原图是正方形,取得的区域却变成菱形。但是我这样分配大小:
ReDim bmBytes(0 To bm.bmWidthBytes - 3, 0 To bm.bmHeight - 1) '设置接收bitmap数据的数组大小
就能够取得正确的区域。下面是调用GetBitmapBits:
GetBitmapBits m_HMaskBm, bm.bmWidthBytes * bm.bmHeight, bmBytes(0, 0)注:bm.bmWidthBytes = 2268 / bm.bmWidth = 755请哪位知道原因请多多指教。
在usercontrol中,我要根据图片的颜色来设置usercontrol的透明,以实现不规则形状控件。
但是在调用GetBitmapBits之前,给数组分配大小的时候,发现很奇怪的现象。如下所述:图片是24位色彩的图片。
给数组分配大小的时候,按道理,应该是 :
ReDim bmBytes(0 To bm.bmWidthBytes - 1, 0 To bm.bmHeight - 1)
但是使用上面的代码分配大小,获得区域都是扭曲的,逐行向右偏移。比如,原图是正方形,取得的区域却变成菱形。但是我这样分配大小:
ReDim bmBytes(0 To bm.bmWidthBytes - 3, 0 To bm.bmHeight - 1) '设置接收bitmap数据的数组大小
就能够取得正确的区域。下面是调用GetBitmapBits:
GetBitmapBits m_HMaskBm, bm.bmWidthBytes * bm.bmHeight, bmBytes(0, 0)注:bm.bmWidthBytes = 2268 / bm.bmWidth = 755请哪位知道原因请多多指教。
解决方案 »
- Wininet API获取繁体WEB源码时出现乱码?
- GETPIXEL()取到的颜色值是设备相关的,如何转换成设备无关的呀,多谢了
- 请问如何用api函数在win2000中设置共享目录
- 我用VB编写了一个在VF文件上进行查询的工具,还有一些功能想实现,但是水平有限,只有请各位大虾帮忙了!!!
- 大哥大姐,救命阿,调用宏绘制柏拉图问题,上次发了没有人回答,李洪根大哥呢?小弟所有的分全给了,再线等待
- 天太热了,喝点可乐,呵呵
- 控件数组空洞问题如何就解决?
- VB中 如何调用类中的数据
- 请问各位大侠获得本机的机器名的API?
- God Save Me!
- 来人,我要结帖
- 关于TreeView控件的问题~以及实时错误'3265'
GetBitmapBits 是DDB相关函数,而这是你用Getobject这个API函数得到的bm.bmWidthBytes,他对应的扫描行大小是DIB的,不是DDB,你出现这个问题也就是因为DIB和DDB扫描行(一行像素实际占用的字节数)的计算公式不一样。DIB要求是扫描行4字节对齐,而DDB只要求2字节对齐。更多解释请参考:
http://topic.csdn.net/u/20081117/19/bd4b82ec-3526-4f74-9744-0b37626fb405.html