主题:[讨论]VB图像处理
Private Sub Command2_Click() '**********************有问题
Dim BITMAP As BITMAPINFO
Dim ImgData() As Byte
Dim lIndex As Single
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 ***********这里的”/3"是何故,求解
Dim BITMAP As BITMAPINFO
Dim ImgData() As Byte
Dim lIndex As Single
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 ***********这里的”/3"是何故,求解
ImgData(lIndex, 0) = (ImgData(lIndex, 0) + ImgData(lIndex, 1) + ImgData(lIndex, 2)) / 3 ***显示溢出错误????怎么修改??
问题在最后两行;