加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VB彩色BMP图片转换为黑白图片

发布时间:2020-12-16 23:14:04 所属栏目:大数据 来源:网络整理
导读:> 24) 0xff; color: #000000; font-size: medium;">VB彩色BMP图片转换为黑白图片 将RGB想成3D之X,Y,Z轴,则BMP的RGB为(r,g,b)与座标(Y,Y)距离最小时的Y即为灰度值 Y = 0.29900 * R 0.58700 * G 0.11400 * B 整数化 Y = ( 9798*R 19235*G 3735*B) / 32768 RGB(
VB彩色BMP图片转换为黑白图片

将RGB想成3D之X,Y,Z轴,则BMP的RGB为(r,g,b)与座标(Y,Y)距离最小时的Y即为灰度值
Y = 0.29900 * R 0.58700 * G 0.11400 * B
整数化
Y = ( 9798*R 19235*G 3735*B) / 32768
RGB(Y,Y)就可以了

需一个内有彩色图的PictureBox,CommandBox
Option Explicit
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hdc As Long,ByVal x As Long,ByVal Y As Long) As Long
Private Declare Function SetPixelV Lib "gdi32" _
(ByVal hdc As Long,_
ByVal Y As Long,ByVal crColor As Long) As Long
Private tmpPic As Picture

Private Sub Form_Load()
Picture1.ScaleMode = 3 ’设为Pixel
Picture1.AutoRedraw = True ’设定所有Pixel的改变不立即在pictureBox上显示
Set tmpPic = Picture1.Picture
End Sub

Private Sub Command1_click()
Dim width5 As Long,heigh5 As Long,rgb5 As Long
Dim hdc5 As Long,i As Long,j As Long
Dim bBlue As Long,bRed As Long,bGreen As Long
Dim Y As Long
width5 = Picture1.ScaleWidth
heigh5 = Picture1.ScaleHeight
hdc5 = Picture1.hdc
For i = 1 To width5
For j = 1 To heigh5
rgb5 = GetPixel(hdc5,i,j)
bBlue = Blue(rgb5)
bRed = Red(rgb5)
bGreen = Green(rgb5)
Y = (9798 * bRed 19235 * bGreen 3735 * bBlue) / 32768
rgb5 = RGB(Y,Y)
SetPixelV hdc5,j,rgb5
Next j
Next i
Set Picture1.Picture = Picture1.Image ’此时才真正显示Picture


End Sub

Private Function Red(ByVal mlColor As Long) As Long Red = mlColor And &HFF End Function Private Function Green(ByVal mlColor As Long) As Long Green = (mlColor / &H100) And &HFF End Function Private Function Blue(ByVal mlColor As Long) As Long Blue = (mlColor / &H10000) And &HFF End Function

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读