Imports System.Math
Namespace rinegan
Public Class Aeye
Public outlinePixel As Integer = 30
Dim Imageslist As New List(Of ImageList)
Dim ImageListCounter As Integer = 0
Dim minX, minY, maxX, maxY As Integer
Dim checkedMatrix(2000, 2000) As Boolean
Dim imageMatrix(2000, 2000) As Boolean
Dim HX(1000) As Integer
Dim LX(1000) As Integer
Dim HY(1000) As Integer
Dim LY(1000) As Integer
Dim Icounter As Integer
Public Shared Function is_pixel_dark_at(ByVal xPos As Integer, ByVal Ypos As Integer, ByVal image As Bitmap, ByVal DarkPixel As Integer) As Boolean
Dim color As Color
Dim r, g, b As Integer
color = image.GetPixel(xPos, Ypos)
r = color.R
g = color.G
b = color.B
If (r < DarkPixel) And (g < DarkPixel) And (b < DarkPixel) Then
Return True
Else
Return False
End If
End Function
Public Shared Function isOutLine(ByVal xPos As Integer, ByVal Ypos As Integer, ByVal image As Bitmap, ByVal bias As Integer) As Boolean
Dim result As Boolean = False
Dim change As Byte = 0
If xPos > 0 And xPos < image.Width - 1 And Ypos > 0 And Ypos < image.Height - 1 Then
Dim color4, color5, color8 As Color
'color1 = image.GetPixel(xPos - 1, Ypos - 1)
'color2 = image.GetPixel(xPos, Ypos - 1)
'color3 = image.GetPixel(xPos + 1, Ypos - 1)
'color7 = image.GetPixel(xPos - 1, Ypos + 1)
color8 = image.GetPixel(xPos, Ypos + 1)
'color9 = image.GetPixel(xPos + 1, Ypos + 1)
color4 = image.GetPixel(xPos - 1, Ypos)
'color6 = image.GetPixel(xPos + 1, Ypos)
color5 = image.GetPixel(xPos, Ypos)
If (CType(color5.R, Integer) > CType(color4.R, Integer) - bias) And (CType(color5.R, Integer) < CType(color4.R, Integer) + bias) Then
change += 1
End If
If (CType(color5.G, Integer) > CType(color4.G, Integer) - bias) And (CType(color5.G, Integer) < CType(color4.G, Integer) + bias) Then
change += 1
End If
If (CType(color5.B, Integer) > CType(color4.B, Integer) - bias) And (CType(color5.B, Integer) < CType(color4.B, Integer) + bias) Then
change += 1
End If
If (CType(color5.R, Integer) > CType(color8.R, Integer) - bias) And (CType(color5.R, Integer) < CType(color8.R, Integer) + bias) Then
change += 1
End If
If (CType(color5.G, Integer) > CType(color8.G, Integer) - bias) And (CType(color5.G, Integer) < CType(color8.G, Integer) + bias) Then
change += 1
End If
If (CType(color5.B, Integer) > CType(color8.B, Integer) - bias) And (CType(color5.B, Integer) < CType(color8.B, Integer) + bias) Then
change += 1
End If
End If
If change = 6 Then
result = True
End If
Return result
End Function
Public Shared Function mark_dark_pixel(ByVal x As Integer, ByVal y As Integer, ByVal bmp1 As Bitmap, ByVal marker As Byte)
For i As Integer = 0 To marker
For j As Integer = 0 To marker
Try
bmp1.SetPixel(x + j, y + i, Color.Green)
Catch ex As Exception
End Try
Next
Next
Return bmp1
End Function
Public Shared Function getPixelColor(ByVal r As Integer, ByVal g As Integer, ByVal b As Integer) As Char
' r= red, g = green, b = blue
Dim colorchar As Char
If r > 245 And g > 245 And b > 245 Then
colorchar = "w" ' white
ElseIf r < 20 And g < 20 And b < 20 Then
colorchar = "k" ' black (kuro in japanese)
ElseIf r > g And g > b And g < 100 Then
colorchar = "r" ' red
ElseIf r > g And g > b And g > 200 Then
colorchar = "y" ' yellow
ElseIf r > g And g > b And 100 < g < 200 Then
colorchar = "o" 'orange
ElseIf (g > r And r > b) Or (g > b And b > r) Then
colorchar = "g" 'green
ElseIf b > g And g > r Then
colorchar = "b" 'blue
ElseIf (b > r And r > g) Or (r > b And g < 20) Then
colorchar = "v" ' violet
Else
colorchar = "u" ' yet undefined
End If
Return colorchar
End Function
Public Shared Function mark_dark_pixelRED(ByVal x As Integer, ByVal y As Integer, ByVal bmp1 As Bitmap, ByVal marker As Byte)
For i As Integer = 0 To marker
For j As Integer = 0 To marker
Try
bmp1.SetPixel(x + j, y + i, Color.Red)
Catch ex As Exception
End Try
Next
Next
Return bmp1
End Function
Public Shared Function mark_dark_pixelBlue(ByVal x As Integer, ByVal y As Integer, ByVal bmp1 As Bitmap, ByVal marker As Byte)
For i As Integer = 0 To marker
For j As Integer = 0 To marker
Try
bmp1.SetPixel(x + j, y + i, Color.Blue)
Catch ex As Exception
End Try
Next
Next
Return bmp1
End Function
'Public Function contourImage(ByVal bmp As Bitmap) As Bitmap
' For index = 0 To bmp.Height - 1
' For j = 0 To bmp.Width - 1
' checkedMatrix(j, index) = False
' imageMatrix(j, index) = is_pixel_dark_at(j, index, bmp, 30)
' 'If imageMatrix(j, index) Then
' ' MsgBox(j, index)
' 'End If
' Next
' Next
' minX = bmp.Width
' minY = bmp.Height
' maxX = 0
' maxY = 0
' Dim jindex As Integer = 0
' Icounter = 0
' For i = 0 To bmp.Height - 1 Step 5
' While jindex < bmp.Width - 1
' If Not checkedMatrix(jindex, i) Then
' If Not imageMatrix(jindex, i) Then
' checkedMatrix(jindex, i) = True
' Else
' tracer(bmp, bmp.Width, bmp.Height, jindex, i)
' HX(Icounter) = maxX
' LX(Icounter) = minX
' HY(Icounter) = maxY
' LY(Icounter) = minY
' Icounter += 1
' minX = bmp.Width
' minY = bmp.Height
' maxX = 0
' maxY = 0
' jindex = jumpImage(jindex, i)
' End If
' End If
' jindex += 1
' End While
' jindex = 0
' Next
' For index = 0 To Icounter
' bmp = graphicContour(bmp, LX(index), HX(index), LY(index), HY(index))
' Next
' Return bmp
'End Function
Public Function jumpImage(ByVal x, y) As Integer
If Icounter > 999 Then
Icounter = 999
End If
Dim n As Integer = 0
For index = 0 To Icounter
If (LX(index) <= x And HX(index) >= x) And (LY(index) <= y And HY(index) >= y) Then
n = HX(index)
End If
Next
Return n
End Function
Public Shared Function graphicContour(ByVal bmp As Bitmap, ByVal xmin As Integer, ByVal xmax As Integer, ByVal ymin As Integer, ByVal ymax As Integer) As Bitmap
For i = xmin To xmax
bmp = mark_dark_pixel(i, ymin, bmp, 1)
bmp = mark_dark_pixel(i, ymax, bmp, 1)
Next
For i = ymin To ymax
bmp = mark_dark_pixel(xmin, i, bmp, 1)
bmp = mark_dark_pixel(xmax, i, bmp, 1)
Next
Return bmp
End Function
Public Shared Function graphicContourRed(ByVal bmp As Bitmap, ByVal xmin As Integer, ByVal xmax As Integer, ByVal ymin As Integer, ByVal ymax As Integer) As Bitmap
For i = xmin To xmax
bmp = mark_dark_pixelRED(i, ymin, bmp, 1)
bmp = mark_dark_pixelRED(i, ymax, bmp, 1)
Next
For i = ymin To ymax
bmp = mark_dark_pixelRED(xmin, i, bmp, 1)
bmp = mark_dark_pixelRED(xmax, i, bmp, 1)
Next
Return bmp
End Function
Public Shared Function graphicContourBlue(ByVal bmp As Bitmap, ByVal xmin As Integer, ByVal xmax As Integer, ByVal ymin As Integer, ByVal ymax As Integer) As Bitmap
For i = xmin To xmax
bmp = mark_dark_pixelBlue(i, ymin, bmp, 1)
bmp = mark_dark_pixelBlue(i, ymax, bmp, 1)
Next
For i = ymin To ymax
bmp = mark_dark_pixelBlue(xmin, i, bmp, 1)
bmp = mark_dark_pixelBlue(xmax, i, bmp, 1)
Next
Return bmp
End Function
'Private Sub tracer(ByVal bmp1 As Bitmap, ByVal w1 As Integer, ByVal h1 As Integer, ByVal x As Integer, ByVal y As Integer)
' If (x > 0 And x < w1) And (y > 0 And y < h1) Then
' If Not checkedMatrix(x, y) Then
' checkedMatrix(x, y) = True
' If imageMatrix(x, y) Then 'not black pixel
' maxer(x, maxX)
' maxer(y, maxY)
' miner(x, minX)
' miner(y, minY)
' tracer(bmp1, w1, h1, x - 1, y - 1)
' tracer(bmp1, w1, h1, x, y - 1)
' tracer(bmp1, w1, h1, x + 1, y - 1)
' tracer(bmp1, w1, h1, x - 1, y)
' tracer(bmp1, w1, h1, x + 1, y)
' tracer(bmp1, w1, h1, x - 1, y + 1)
' tracer(bmp1, w1, h1, x, y + 1)
' 'tracer(bmp1, w1, h1, x + 1, y + 1)
' End If
' End If
' End If
'End Sub
Public Shared Sub maxer(ByVal a As Integer, ByRef b As Integer)
If a > b Then
b = a
End If
End Sub
Public Shared Sub miner(ByVal a As Integer, ByRef b As Integer)
If a < b Then
b = a
End If
End Sub
End Class
Public Class ImageList
Public minX As Integer
Public minY As Integer
Public maxX As Integer
Public maxY As Integer
End Class
End Namespace