1

このコードは常に算術オーバーフロー例外を通過します。どうしたの ?

Function ChannelSum(ByVal C As System.Drawing.Color) As Integer
    Dim temp As Integer : temp = (C.R + C.G + C.B)
    Return temp
End Function

...

Dim x, y, R, G, B, a As Integer : Dim tmp As Color
bmp = New Bitmap(picBox.Tag.ToString)
xMax = bmp.Width - 1 : yMax = bmp.Height - 1
For x = 0 To xMax Step 1
    For y = 0 To yMax Step 1
        tmp = bmp.GetPixel(x, y) : a = ChannelSum(tmp)
    Next y
Next x

最初の出会いでループが壊れる!

4

1 に答える 1

3

CR およびその他はバイト フィールドであり、255 までの値しか保持できません。バイト フィールドを合計すると、255 よりも大きな数値になります。最初に各色要素で CInt() を使用します。

 temp = (CInt(C.R) + CInt(C.G) + CInt(C.B))
于 2012-08-02T14:53:48.020 に答える