各位大侠,我想问一下我编程读取了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)代表什么?
cc=picture1.point(x,y)
r=cc and &HFF
判断r值是否和PicCol(x,y,0)的值相等,但结果是错误的?有谁知道为什么?
三维数组PicCol(x,y,k)代表什么?
PicCol(x,y,k)也不是灰度值呀!
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)是个什么东西?
你用它试试。
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判断设备是否支持本函数
Text2.Text = PicCol(78, 30, 0)
Text3.Text = (GetPixel(Picture1.hdc, 78, 30) And &HFF)
两者的值不像等呀,你说这是为什么?
你说对了,但是PicCol(x,y,0),PicCol(x,y,1),PicCol(x,y,2)分别代表了图像中坐标(x,y)的b,g,r值。