利用DIB提取图像的像素存入一个colout数组中,已经实现,
r=colout(2,x,y)
g=colout(1,x,y)
b=colout(0,x,y)
例如我要求(2,4)到(7,9)范围内的r分量的总和,算法该怎么写

解决方案 »

  1.   

    Public Sub mosaic()
    Dim r As Long
    Dim g As Long
    Dim w As Long
    Dim h As Longw = Text1.Text
    h = Text2.Text
    row = Int(Picture1.ScaleWidth / w)
    lin = Int(Picture1.ScaleHeight / h)
    rl = Picture1.ScaleWidth Mod h
    ll = Picture1.ScaleHeight Mod w
     For y = 0 To (lin - 1) * h Step h
     For x = 0 To (row - 1) * w Step w
     For k = x To w - 1
     For j = y To h - 1
     r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To w - 1
     For j = y To h - 1
     ColOut(2, k, j) = r / (w * h)
     ColOut(1, k, j) = g / (w * h)
     ColOut(0, k, j) = b / (w * h)
     Next j
     Next k
     Picture2.Refresh
     Next x
     
     If rl <> 0 Then
     xl = Picture1.ScaleWidth - rl
     For k = x To xl - 1
     For j = y To h - 1
      r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To xl - 1
     For j = y To h - 1
     
     ColOut(2, k, j) = r / (xl * h)
     ColOut(1, k, j) = g / (xl * h)
     ColOut(0, k, j) = b / (xl * h)
     Next k
     Next j
     Picture2.Refresh
     End If
     Next y
     
     
     If ll <> 0 Then
     yl = Picture.ScaleHeight - ll
      For x = 0 To (row - 1) * w Step w
     For k = x To w - 1
     For j = y To yl - 1
      r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To w - 1
     For j = y To yl - 1
     
     ColOut(2, k, j) = r / (w * yl)
     ColOut(1, k, j) = g / (w * yl)
     ColOut(0, k, j) = b / (w * yl)
     Next k
     Next j
     Picture2.Refresh
     End If
     Next x
     
    If rl <> 0 Then
     xl = Picture1.ScaleWidth - rl
     yl = Picture.ScaleHeight - ll
     For k = x To xl - 1
     For j = y To yl - 1
      r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To xl - 1
     For j = y To yl - 1
     
     ColOut(2, k, j) = r / (xl * yl)
     ColOut(1, k, j) = g / (xl * yl)
     ColOut(0, k, j) = b / (xl * yl)
     Next k
     Next j
     Picture2.Refresh
     End If
     End If
    End Sub
     这短程序哪里出错了
      

  2.   


    Public Sub mosaic()
    Dim r As Long
    Dim g As Long
    Dim w As Long
    Dim h As Longw = Text1.Text
    h = Text2.Text
    row = Int(Picture1.ScaleWidth / w) '马赛克列数-1
    lin = Int(Picture1.ScaleHeight / h) '马赛克行数-1
    rl = Picture1.ScaleWidth Mod h '所余块中的列数
    ll = Picture1.ScaleHeight Mod w '所余块中的行数
     For y = 0 To (lin - 1) * h Step h
     For x = 0 To (row - 1) * w Step w
     For k = x To w - 1
     For j = y To h - 1
     r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To w - 1
     For j = y To h - 1
     ColOut(2, k, j) = r / (w * h)
     ColOut(1, k, j) = g / (w * h)
     ColOut(0, k, j) = b / (w * h)
     Next j
     Next k
     Picture2.Refresh
     Next x
     
     If rl <> 0 Then
     xl = Picture1.ScaleWidth - rl
     For k = x To xl - 1
     For j = y To h - 1
      r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To xl - 1
     For j = y To h - 1
     
     ColOut(2, k, j) = r / (xl * h)
     ColOut(1, k, j) = g / (xl * h)
     ColOut(0, k, j) = b / (xl * h)
     Next k
     Next j
     Picture2.Refresh
     End If
     Next y
     
     
     If ll <> 0 Then
     yl = Picture.ScaleHeight - ll
      For x = 0 To (row - 1) * w Step w
     For k = x To w - 1
     For j = y To yl - 1
      r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To w - 1
     For j = y To yl - 1
     
     ColOut(2, k, j) = r / (w * yl)
     ColOut(1, k, j) = g / (w * yl)
     ColOut(0, k, j) = b / (w * yl)
     Next k
     Next j
     Picture2.Refresh
     End If
     Next x
     
    If rl <> 0 Then
     xl = Picture1.ScaleWidth - rl
     yl = Picture.ScaleHeight - ll
     For k = x To xl - 1
     For j = y To yl - 1
      r = ColOut(2, k, j)
     g = ColOut(1, k, j)
     b = ColOut(0, k, j)
     Next j
     Next k
     For k = x To xl - 1
     For j = y To yl - 1
     
     ColOut(2, k, j) = r / (xl * yl)
     ColOut(1, k, j) = g / (xl * yl)
     ColOut(0, k, j) = b / (xl * yl)
     Next k
     Next j
     Picture2.Refresh
     End If
     End If
    End Sub
     哪里出错了