回 帖 发 新 帖 刷新版面

主题:tjestar帮忙

  你好,一共有三四个问题,求帮忙!!!!
    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个回复)

沙发

没用过。。。帮项吧

板凳

你的帖子里只提了一个问题:
.bmiHeader.biSize = 40 '这是什么意思???

这是位图BMP信息头的长度,共40个字节。
看样子你对位图的数据结构不熟悉,可看看我写的“bmp文件的数据结构”旧贴。

3 楼

带问号的都是问题,请问“一江春水”那个40是怎么来的?

4 楼

带问号的都是问题,都急需答案呀,还有就是请问“一江春水”那个40是怎么来的?

5 楼

40怎么来的?我写的“bmp文件的数据结构”贴中有答案,既然你不看,我有什么好说的。
你再看看“[讨论]VB图像处理”一贴,你的问题与他的问题一样,我就不重复回答了。

6 楼

还有For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3中的“/3”是啥意思?请原谅我的无知

7 楼

结合上面的程序,我需要一个把像素值在一定范围内的去除,或者是只处理某一范围的像素,使之赋予一定值的完整代码:?或者提供些许建议。谢谢

8 楼

For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3中的“/3”是啥意思?
发现你比较懒啊,“[讨论]VB图像处理”贴你肯定是没看,我已经在那贴里答复了:因为24位真彩位图每个像素由3字节组成(3个字节分别是红绿蓝三基色),所以除以3的结果就表示这个图片有多少像素。
去除像素的事情建议你目前不要去想,很麻烦的。如果只是去除某一条扫描线倒是可行的,因为一条扫描线占用多少字节,以及它的位置,是可以通过计算得到的。还是那句话,去看看《bmp文件的数据结构》。

9 楼

哦,提醒一下,For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3这行代码最后要减1,这样:For lIndex = 0 To BITMAP.bmiHeader.biSizeImage / 3 - 1
否则多循环了一个像素,会出错的。

10 楼

如何提取图片中打印部分的像素值,并使之赋值予一个变量如pix????

我来回复

您尚未登录,请登录后再回复。点此登录或注册