回 帖 发 新 帖 刷新版面

主题:求助!!!各位VB及VC高手救命啊

如何利用VB获取bmp格式的曲线图像的像素位置数据,并以x,y两个分量分开保存在两个不同的数据文件中阿?
由于我对于VB了解得很少,而现在又急着用,所以哪位好人能帮忙把这段代码给我写出来啊??不胜感激阿。。。 

回复列表 (共4个回复)

沙发

我只要得到曲线图象的各像素的坐标就行。

各位高手帮帮忙

板凳

新建一个工程然后在窗口中添加两个PICTURE控件和一个按钮控件,运行前在第一个PICTURE控件中调入一幅图像,运行程序单击按钮即可看到运行结果。(记住第二个PICTURE控件的AUTOREDRAW要设为TRUE)

Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Type BITMAPINFOHEADER '40 bytes
        biSize As Long
        biWidth As Long
        biHeight As Long
        biPlanes As Integer
        biBitCount As Integer
        biCompression As Long
        biSizeImage As Long
        biXPelsPerMeter As Long
        biYPelsPerMeter As Long
        biClrUsed As Long
        biClrImportant As Long
End Type
Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type
Private Type BITMAPINFO
        bmiHeader As BITMAPINFOHEADER
        bmiColors As RGBQUAD
End Type

Private Const DIB_RGB_COLORS = 0 '  color table in RGBs

Private Sub Command1_Click()
    
    Dim BITMAP As BITMAPINFO
    Dim ImgData() As Byte
    Dim lIndex As Long
    
    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),如果你需要对图像进行处理只需改变数组中的数据即可完成
            
            SetDIBits Picture2.hdc, Picture2.Image.Handle, 0, BITMAP.bmiHeader.biHeight - 1, ImgData(0, 0), BITMAP, DIB_RGB_COLORS '将位图数据写入PICTURE2中
        End If
    End If
End Sub


上面是图象的转移,各位高手能不能修改一下,将除无色像素(即白色的像素)以外,图象中的其他像素坐标打印或保存出来。

我的VB差,各位高手帮帮忙

3 楼

读取图片长度、高度
用长度作下标声明数组
从第一列到最后一列
  数组对应元素唯一不可能的特定值
  从最顶一个像素到最底一个像素
    如果颜色是曲线色那么
      保存行数到数组对应元素
      跳出循环
    结束如果
  下一像素
下一列

4 楼


各位大哥,能不能帮我完成这个程序

我来回复

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