注册 登录
编程论坛 VB6论坛

VB实现彩色图像变为灰度图像 代码很短 求解释

迪拜axq 发布于 2012-09-29 16:27, 2377 次点击
代码如下
for循环代码部分求解释 当然其他的代码也解释也非常感谢

程序代码:
Dim intbtnselected As Integer
Dim PictureName As String
Private Sub Command1_Click()
CommonDialog1.FileName = ""
CommonDialog1.Flags = VbOFNFileMustExist
CommonDialog1.Filter = "所有文件|*.*|(*.bmp)|*.bmp|(*.jpg)|*.jpg|(*.GIF)|*.gif"
CommonDialog1.FilterIndex = 2
CommonDialog1.DialogTitle = "打开文件"
CommonDialog1.Action = 1
PictureName = CommonDialog1.FileName
If PictureName = "" Then
  Exit Sub
End If

Image1.Picture = LoadPicture(PictureName)
Picture1.Width = Image1.Width
Picture1.Height = Image1.Height
Picture1.Picture = LoadPicture(PictureName)

Picture2.Width = Image1.Width
Picture2.Height = Image1.Height

End Sub

Private Sub Command2_Click()
Dim j, i As Integer
Dim X, Y As Integer
Dim n, Num As Integer
Dim bytRed, bytGreen, bytBlue, btyAverage As Long
Dim pixel As Long
i = 0
j = 0
X = Picture1.ScaleWidth
Y = Picture1.ScaleHeight

For i = 1 To Y - 1
  For j = 1 To X - 1
  pixel& = Picture1.Point(j, i)
  bytRed = pixel& Mod 256
  bytGreen = ((pixel& And &HFF00) / 256&) Mod 256&
  bytBlue = (pixel& And &HFF0000) / 65536
  btyAverage = Fix((bytRed + bytGreen + bytBlue) / 3)
  Picture2.PSet (j, i), RGB(btyAverage, btyAverage, btyAverage)
  Next
Next
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Command4_Click()
Picture1.Picture = LoadPicture("")
Picture1.Cls

Picture2.Cls
End Sub



[ 本帖最后由 迪拜axq 于 2012-9-29 16:29 编辑 ]
2 回复
#2
风吹过b2012-10-01 07:32
  For j = 1 To X - 1
  pixel& = Picture1.Point(j, i)                            '取点颜色
  bytRed = pixel& Mod 256                                  '分解出红色变量来  内存里颜色表示是 00 BB GG RR ,R在最低位,G在中间,B在最前面,共3个字节,然后最前面再加一个字节凑整为一个 long 类型
  bytGreen = ((pixel& And &HFF00) / 256&) Mod 256&         '取中间位,然后右移1字节,再求余.感觉这里求余操作是多余的步骤.我现在无法测试.
  bytBlue = (pixel& And &HFF0000) / 65536                  '取最高位,直接右移2字节
  btyAverage = Fix((bytRed + bytGreen + bytBlue) / 3)      '求平均
  Picture2.PSet (j, i), RGB(btyAverage, btyAverage, btyAverage)   '画点
  Next
#3
迪拜2012-10-01 09:31
版主威武啊 得正解
1