【发布时间】:2018-12-12 09:54:42
【问题描述】:
我目前正在 Visual Basic 上制作迷宫游戏,我需要检索图像中所有像素的颜色。为此,我制作了一个嵌套的 for next 循环——宽度为 1,高度为 1,因为代码遍历两个循环,它将获取每个像素的像素颜色并将其放置在二维数组中。
问题是它只遍历长度而不是宽度
这是我的代码:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim widthIMG As Integer
Dim lengthIMG As Integer
Dim pixels(438, 343) As Color
Dim pixelsData(438, 343) As String
Dim myBitmap As New Drawing.Bitmap(PictureBox1.Image)
For widthIMG = 1 To myBitmap.Width
For lengthIMG = 1 To myBitmap.Height
pixels(widthIMG, lengthIMG) = myBitmap.GetPixel(widthIMG, lengthIMG)
Select Case pixels(widthIMG, lengthIMG).ToString
Case "Color [A=255, R=0, G=0, B=0]"
TextBox1.Text = TextBox1.Text & "Width: " & widthIMG & "Length: " & lengthIMG & "Color: " & "Black " & vbCrLf
pixelsData(widthIMG, lengthIMG) = "Black"
Case "Color [A=255, R=255, G=255, B=255]"
TextBox1.Text = TextBox1.Text & "Width: " & widthIMG & "Length: " & lengthIMG & "Color: " & "White" & vbCrLf
pixelsData(widthIMG, lengthIMG) = "White"
End Select
Next
Next
End Sub
【问题讨论】:
-
你能发布一个你从上面的代码中得到的示例输出
-
@preciousbetine ibb.co/0scBVqb 所以它会遍历每个像素。你可以看到最终的长度值为 342,这是实际图像的高度(这意味着长度工作正常)但宽度没有改变,它只是保持在 1。
-
您似乎拥有超过 150,000 个数据点。也许您的文本框空间不足
-
我想补充一点信息 - 使用控件作为主要数据源通常被认为是个坏主意。您最好将信息存储在数组或列表中,并使用它来填充您的用户界面。我还建议数组或列表应该存储布尔值而不是字符串 - 它可能更快并且使用更少的内存。使用
True或False来表示黑色或白色。在您的情况下,可能黑色为True,因为它代表一堵墙,白色为False,因为它代表什么