主题:tjestar帮忙
missnanjing
[专家分:0] 发布于 2014-08-12 18:22:51
你好,一共有三四个问题,求帮忙!!!!
With BITMAP
.bmiHeader.biSize = 40 '这是什么意思???
End With
If GetDIBits(Picture1.hdc, Picture1.Picture.Handle, 0, 0, 0, BITMAP, DIB_RGB_COLORS) <> 0 Then '获取图像位图数据大小
ReDim ImgData(BITMAP.bmiHeader.biSizeImage / 3, 2) '重定义数组准备接收位图数据
If GetDIBits(Picture1.hdc, Picture1.Picture.Handle, 0, BITMAP.bmiHeader.biHeight - 1, ImgData(0, 0), BITMAP, DIB_RGB_COLORS) <> 0 Then '正式获取位图数据并将数据存入定义的数组中
'注意数组中颜色分量的存储顺序为:B、G、R(并不是R、G、B),如果你需要对图像进行处理只需改变数组中的数据即可完成
'**************** 下面这段程序是将图像亮度变暗(只作为演示,其它效果你可以自己动手做) ?????请再给出其他的一些效果???? ***********************
'注意:第一条扫描线的位置是从左下角开始
'ImgData(X,0)中保存的为蓝色分量值
'ImgData(X,1)中保存的为绿色分量值
'ImgData(X,2)中保存的为红色分量值
For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3
ImgData(lIndex, 0) = (ImgData(lIndex, 0) + ImgData(lIndex, 0)) / 2 '溢出why? I donnot understand???????
ImgData(lIndex, 1) = (ImgData(lIndex, 0) + ImgData(lIndex, 1) + ImgData(lIndex, 2)) / 3
ImgData(lIndex, 2) = (ImgData(lIndex, 0) + ImgData(lIndex, 1) + ImgData(lIndex, 2)) / 3
Next
'*********************************************************************
SetDIBits Picture2.hdc, Picture2.Image.Handle, 0, BITMAP.bmiHeader.biHeight - 1, ImgData(0, 0), BITMAP, DIB_RGB_COLORS '将位图数据写入PICTURE2中
End If
回复列表 (共11个回复)
沙发
zlycjb [专家分:30] 发布于 2014-08-13 13:36:27
没用过。。。帮项吧
板凳
一江秋水 [专家分:9680] 发布于 2014-08-16 10:25:04
你的帖子里只提了一个问题:
.bmiHeader.biSize = 40 '这是什么意思???
这是位图BMP信息头的长度,共40个字节。
看样子你对位图的数据结构不熟悉,可看看我写的“bmp文件的数据结构”旧贴。
3 楼
missnanjing [专家分:0] 发布于 2014-08-16 13:30:17
带问号的都是问题,请问“一江春水”那个40是怎么来的?
4 楼
missnanjing [专家分:0] 发布于 2014-08-17 13:54:51
带问号的都是问题,都急需答案呀,还有就是请问“一江春水”那个40是怎么来的?
5 楼
一江秋水 [专家分:9680] 发布于 2014-08-18 06:19:24
40怎么来的?我写的“bmp文件的数据结构”贴中有答案,既然你不看,我有什么好说的。
你再看看“[讨论]VB图像处理”一贴,你的问题与他的问题一样,我就不重复回答了。
6 楼
missnanjing [专家分:0] 发布于 2014-08-19 17:03:19
还有For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3中的“/3”是啥意思?请原谅我的无知
7 楼
missnanjing [专家分:0] 发布于 2014-08-20 13:37:45
结合上面的程序,我需要一个把像素值在一定范围内的去除,或者是只处理某一范围的像素,使之赋予一定值的完整代码:?或者提供些许建议。谢谢
8 楼
一江秋水 [专家分:9680] 发布于 2014-08-21 11:23:08
For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3中的“/3”是啥意思?
发现你比较懒啊,“[讨论]VB图像处理”贴你肯定是没看,我已经在那贴里答复了:因为24位真彩位图每个像素由3字节组成(3个字节分别是红绿蓝三基色),所以除以3的结果就表示这个图片有多少像素。
去除像素的事情建议你目前不要去想,很麻烦的。如果只是去除某一条扫描线倒是可行的,因为一条扫描线占用多少字节,以及它的位置,是可以通过计算得到的。还是那句话,去看看《bmp文件的数据结构》。
9 楼
一江秋水 [专家分:9680] 发布于 2014-08-21 11:30:53
哦,提醒一下,For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3这行代码最后要减1,这样:For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3 - 1
否则多循环了一个像素,会出错的。
10 楼
missnanjing [专家分:0] 发布于 2014-08-30 20:06:13
如何提取图片中打印部分的像素值,并使之赋值予一个变量如pix????
我来回复