|

楼主 |
发表于 2011-8-4 12:05:25
|
显示全部楼层
这个是彩色转换黑白的代码
Pic1.Cls
Dim W As Integer, H As Integer, I As Integer, J As Integer
Dim W2 As Integer, H2 As Integer, I2 As Integer, J2 As Integer
Dim BI As BITMAPINFO
'1 获得图片2数据
W2 = ScaleX(Pic2.Picture.Width, vbHimetric, vbPixels)
H2 = ScaleY(Pic2.Picture.Height, 8, 3)
With BI.bmiHeader
.biSize = Len(BI.bmiHeader)
.biWidth = W2
.biHeight = -H2
.biBitCount = 32
.biPlanes = 1
End With
ReDim yPic(3, W2 - 1, H2 - 1)
'将一幅位图P2的二进制位 复制到一幅与设备无关的位图里
I = GetDIBits(Pic2.hdc, Pic2.Picture.Handle, 0, H2, yPic(0, 0, 0), BI, DIB_RGB_COLORS)
'Debug.Print I
'如果在这里处理一下,图像大的话,可能会快一点。
For I2 = 0 To W2 - 1
For J2 = 0 To H2 - 1
If (yPic(2, I2, J2) * 0.9 + yPic(1, I2, J2) * 0.9 + yPic(0, I2, J2) * 0.9) / 3 < Val(Text1.Text) Then '这里的text是转换阀值,也就是深度
Pic2.PSet (I2, J2), 0
Else
Pic2.PSet (I2, J2), RGB(255, 255, 255)
End If
Next J2
DoEvents
Next I2
Pic2.Picture = Pic2.Image
ReleaseDC 0, hDCPS
|
|