各位大侠,我想问一下我编程读取了BMP文件的数据存在了三维数组PicCol(x,y,k)k的值分别为(0,1,2),我愿先以为PicCol(x,y,k)中x,y为图像中某一点的坐标,k的0,1,2分别代表r,g,b。也就是PicCol(x,y,0),PicCol(x,y,1),PicCol(x,y,2)分别代表了图像中坐标(x,y)的r,g,b值。但是我把这个想法实践了一下,通过下面方法:
cc=picture1.point(x,y)
r=cc and &HFF
判断r值是否和PicCol(x,y,0)的值相等,但结果是错误的?有谁知道为什么?
三维数组PicCol(x,y,k)代表什么?

解决方案 »

  1.   

    k直接是象素值,k=r+g*255+b*255*255  或k=b+g*255+r*255*255  记不清了:)
      

  2.   

    不对呀,k的值就是0,1,2呀,怎么会是k=r+g*255+b*255*255  
    PicCol(x,y,k)也不是灰度值呀!
      

  3.   

    原程序是这样的,即这个三维数组这样得到的:open 一个bmp图像的文件名 for binary as #1
    get #1,,BF
    get#1,,BI
    XPos=BI.biWidth
    YPos=BI.biHeight
    ColorNum=BI.biBitCount
    select Case ColorNum
    Case 24Case 24For i = 0 To YPos - 1
       For j = 0 To XPos - 1
          For k = 0 To 2
            Get #1, , Col
            PicCol(j, i, k) = Col
          Next
       Next
        If Int((XPos * 3) / 4) <> (XPos * 3) / 4 Then
          For kk = 1 To 4 - ((XPos * 3) Mod 4)
          Get #1, , Pix
          Next
        End If
    Next
     Case 8
     Dim index As Byte
     Dim Palentry As Byte
     Dim unused As Integer
     Dim RGBPalette(256, 3) As Byte
     Dim PaletteSize As Integer
     PaletteSize = 2 ^ ColorNum
     For i = 0 To PaletteSize - 1
     For j = 0 To 2
     Get #1, , Palentry
     RGBPalette(i, j) = Palentry
     Next
     Get #1, , Palentry
     unused = Palentry
     Next
     For i = 0 To YPos - 1
     For j = 0 To XPos - 1
     Get #1, , index
     PicCol(j, i, 0) = RGBPalette(index, 0)
     PicCol(j, i, 1) = RGBPalette(index, 1)
     PicCol(j, i, 2) = RGBPalette(index, 2)
    Next
    If Int(XPos / 4) <> XPos Mod 4 Then
    For kk = 1 To 4 - XPos Mod 4
    Get #1, , Pix
    Next
    End If
    Next
    End Select
    Close #1大家分析一下,PicCol(i,j,k)是个什么东西?
      

  4.   

    biBitCount=24 表示位图最多有2^24种颜色。这种位图没有调色板(bmiColors成员尺寸为0),在位数组中,每3个字节代表一个象素,分别对应于颜色R、G、B。 
      

  5.   

    PicCol(x,y,0),PicCol(x,y,1),PicCol(x,y,2)分别代表了图像中坐标(x,y)的r,g,b值。
    你用它试试。
    Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    【说明】
    在指定的设备场景中取得一个像素的RGB值
    【返回值】
    Long,指定点的RGB颜色。如指定的点位于设备场景的剪切区之外,则返回CLR_INVALID
    【参数表】
      hdc ------------  Long,一个设备场景的句柄  x,y ------------  Long,逻辑坐标中要检查的点
    【其它】
    用GetDeviceCaps判断设备是否支持本函数
      

  6.   

    按你所说的,PicCol(78,30,0)就是代表了图像坐标中(78,30)的r值了,但是不行呀,我用下面的方法测试了一下不行:
    Text2.Text = PicCol(78, 30, 0)
    Text3.Text = (GetPixel(Picture1.hdc, 78, 30) And &HFF)
    两者的值不像等呀,你说这是为什么?
      

  7.   

    to 叶帆
     你说对了,但是PicCol(x,y,0),PicCol(x,y,1),PicCol(x,y,2)分别代表了图像中坐标(x,y)的b,g,r值。