Public Class scaleimagemap
Inherits System.ComponentModel.Component
#Region " Component Designer generated code "
Public Sub New(Container As System.ComponentModel.IContainer)
MyClass.New()
'Required for Windows.Forms Class Composition Designer support
Container.Add(me)
End Sub
Public Sub New()
MyBase.New()
'This call is required by the Component Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Component overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Component Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Component Designer
'It can be modified using the Component Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub
#End Region
#Region " Remove Duplicate Map Coordinate Function "
Public Function RemoveDuplicateMapCoordinates(ByVal sCoords As String)
Dim sX(), sY(), sTemp, sTemp2 As String
Dim iLen As Int32 = 1
Dim iPos As Int32 = 1
Dim i, iIndex As Int32
Do Until iPos = 0
iPos = InStr(iPos, sCoords, " ", CompareMethod.Text)
If iPos <> 0 Then
sCoords = Mid(sCoords, 1, (iPos - 1)) & Mid(sCoords, iPos + 1)
End If
Loop
i = 1
iIndex = 0
iPos = 0
iLen = 1
For iLen = 1 To Len(sCoords)
sTemp = Mid(sCoords, iLen, 1)
If IsNumeric(sTemp) = True Then
'Coordinate Number
sTemp2 = sTemp2 & sTemp
ElseIf sTemp = "," Then
'Seperator
If i = 1 Then
'X Value increment Arrays
iIndex += 1
ReDim Preserve sX(iIndex)
ReDim Preserve sY(iIndex)
sX(iIndex) = sTemp2
sTemp2 = ""
i = 2
ElseIf i = 2 Then
'Y Value
sY(iIndex) = sTemp2
sTemp2 = ""
i = 1
End If
End If
Next
i = 1
sTemp = ""
sY(iIndex) = sTemp2
For i = 1 To iIndex
For t As Int32 = 1 To iIndex
If i <> t Then
If sX(i) = sX(t) And sY(i) = sY(t) Then
'Found Duplicate
sX(i) = ""
sY(i) = ""
End If
End If
Next
If sX(i) <> "" And sY(i) <> "" Then
sTemp = sTemp & sX(i) & "," & sY(i) & " , "
End If
Next
sTemp = Left(sTemp, (Len(sTemp) - 2))
Return sTemp
End Function
#End Region
#Region " Scale Image Map Function "
Function ScaleImageMap(ByVal sCoords As String, ByVal dScale As Double)
Dim sX(), sY(), sTemp, sTemp2 As String
Dim iLen As Int32 = 1
Dim iPos As Int32 = 1
Dim i, iIndex As Int32
Do Until iPos = 0
iPos = InStr(iPos, sCoords, " ", CompareMethod.Text)
If iPos <> 0 Then
sCoords = Mid(sCoords, 1, (iPos - 1)) & Mid(sCoords, iPos + 1)
End If
Loop
i = 1
For iLen = 1 To Len(sCoords)
sTemp = Mid(sCoords, iLen, 1)
If IsNumeric(sTemp) = True Then
'Coordinate Number
sTemp2 = sTemp2 & sTemp
ElseIf sTemp = "," Then
'Seperator
If i = 1 Then
'X Value increment Arrays
iIndex += 1
ReDim Preserve sX(iIndex)
ReDim Preserve sY(iIndex)
sX(iIndex) = sTemp2
sTemp2 = ""
i = 2
ElseIf i = 2 Then
'Y Value
sY(iIndex) = sTemp2
sTemp2 = ""
i = 1
End If
End If
Next
sY(iIndex) = sTemp2
i = 1
If dScale > 0 Then
For i = 1 To iIndex
sX(i) = Int(CInt(sX(i)) * dScale)
sY(i) = Int(CInt(sY(i)) * dScale)
Next
End If
sTemp = ""
For i = 1 To iIndex
sTemp = sTemp & sX(i) & "," & sY(i) & ","
Next
sTemp = Left(sTemp, (Len(sTemp) - 1))
sTemp = RemoveDuplicateMapCoordinates(sTemp)
Return sTemp
End Function
#End Region
#Region " Find All Area Tags and Coordinates "
Public Function FindAreaTags(ByVal sHTML As String, Optional ByVal sURL As String = "default.aspx", Optional ByVal bScale As Boolean = False, Optional ByVal dScale As Double = 1, Optional ByVal sMouseOver As String = "nothing")
Dim iPos, iPos2, iLen As Int32
Dim sTemp, sBegin, sEnd, sTemp2 As String
iPos = InStr(1, sHTML, "<AREA", CompareMethod.Text)
iPos2 = InStr(iPos, sHTML, "COORDS=", CompareMethod.Text) + 7
iPos2 = iPos2 - iPos
sBegin = Mid(sHTML, iPos, iPos2) & "'"
sEnd = "'" & sMouseOver & " HREF='" & sURL & "'>"
iPos2 = 1
iPos = 1
Do Until iPos = 0
iPos = InStr(iPos2, sHTML, "COORDS=" & Chr(34), CompareMethod.Text)
If iPos <> 0 Then
iPos2 = InStr(iPos, sHTML, "HREF", CompareMethod.Text)
iPos2 = (iPos2 - 10) - iPos
iPos = iPos + 8
If bScale = True Then
'Need to scale coordinates
sTemp2 = ScaleImageMap(Mid(sHTML, iPos, iPos2), dScale)
Else
sTemp2 = Mid(sHTML, iPos, iPos2)
End If
sTemp = sTemp & sBegin & sTemp2 & sEnd & vbCrLf
iPos2 = (iPos + iPos2) + 10
End If
Loop
Return sTemp
End Function
#End Region
End Class