PictureTagger/SB-PictureTagger/Modul_SB-PictureTagger.vb

354 lines
15 KiB
VB.net
Raw Normal View History

2015-02-15 05:12:00 +02:00
Option Explicit On
Imports System.IO
Module Modul_SB_PictureTagger
Structure Mark
2015-02-16 02:34:00 +02:00
Dim PositionX As Long
Dim PositionY As Long
Dim ID As Long
Dim Radius As Long
2015-02-15 05:12:00 +02:00
Dim Description As String
End Structure 'Mark
Structure Place
2015-02-16 02:34:00 +02:00
Dim Title As String
Dim Adresse As String
Dim Description As String
Dim GPS As String
2015-02-16 23:54:00 +02:00
Public Sub Clear()
Me.Adresse = Nothing
Me.Description = Nothing
Me.GPS = Nothing
End Sub
2015-02-15 05:12:00 +02:00
End Structure
Structure TaggedIMG
2015-02-16 02:34:00 +02:00
Dim ID As String
2015-02-15 05:12:00 +02:00
Dim Title As String
Dim Description As String
Dim Time As String
2015-02-16 23:54:00 +02:00
Dim Markierung() As Mark
2015-02-15 05:12:00 +02:00
Dim Image As Image
2015-02-16 23:54:00 +02:00
Dim Ort As Place
2015-02-15 05:12:00 +02:00
Dim Path As String
2015-02-16 02:34:00 +02:00
Public Sub Create_NewMark(ByVal ID As Long, ByVal PositionX As Long, ByVal PositionY As Long, Optional ByVal Radius As Long = 10, Optional ByVal Description As String = "")
'Dim Index As Integer
'If Array.IndexOf(Me.Mark, ) Then Index = 1 + UBound(Me.Mark)
'ReDim Me.Mark(Index)
'Me.Mark(Index).ID = ID
'Me.Mark(Index).PositionX = PositionX
'Me.Mark(Index).PositionY = PositionY
'Me.Mark(Index).Radius = Radius
'Me.Mark(Index).Description = Description
End Sub
2015-02-16 23:54:00 +02:00
Public Sub Clear()
Me.ID = Nothing
Me.Image = Nothing
Me.Title = Nothing
Me.Description = Nothing
Me.Time = Nothing
Me.Path = Nothing
Me.Ort.Clear()
ReDim Me.Markierung(0)
Me.Markierung(0).Description = Nothing
Me.Markierung(0).PositionX = Nothing
Me.Markierung(0).PositionY = Nothing
Me.Markierung(0).ID = Nothing
Me.Markierung(0).Radius = Nothing
End Sub
2015-02-15 05:12:00 +02:00
End Structure 'TaggedIMG
2015-02-16 02:34:00 +02:00
2015-02-15 05:12:00 +02:00
'Methoden Index:
'1.LoadPicture
' Parameter: "-SupportedFormats-" -> Array of Supported Formats;
' Parameter: File Pfad -> Picture ##in Work!##
'2.DirReadPhotos
' Parameter: Ordner Pfad; Return: Array von Pfaden der Bilddateien des Ordners
2015-02-16 02:34:00 +02:00
'3.Load_Taggs
' Parameter: TaggedIMG-Objekt, DB_Locate -> Indirekte änderung des TaggedIMG-Objekts
'4.Save_Taggs
' Parameter: TaggedIMG-Objekt, DB_Locate
2015-02-15 05:12:00 +02:00
'###################################################################################################################
'############### 1.LoadPicture #####################################################################################
'###################################################################################################################
Public Function LoadPicture(ByVal sPath As String) As Object
'Deklariere
Dim aPhotoFormats(0) As String 'Array Enthält die Unsterstützten Photoformate
'###Statische Einstellungen###
'Die Untestützten Formate einstellen
ReDim Preserve aPhotoFormats(5)
aPhotoFormats(0) = ".jpg"
aPhotoFormats(1) = ".bmp"
aPhotoFormats(2) = ".gif"
aPhotoFormats(3) = ".png"
aPhotoFormats(4) = ".jp2"
aPhotoFormats(5) = ".tif"
'Entscheide ob Rückgabe des Arrays für die FormatUnterstützung
'Oder das Laden des Bildes aus der angegebenen Quelle
If sPath = "-SupportedFormats-" Then
LoadPicture = aPhotoFormats
ElseIf (File.Exists(sPath) = True) Then
'BildLadeFunktion
'Main Work###############################################
Dim iPicture As New TaggedIMG
2015-02-16 02:34:00 +02:00
Dim iPicture_Verz As String
2015-02-15 05:12:00 +02:00
'Testen ob Vormat unterstüzt!
2015-02-16 02:34:00 +02:00
If (Array.IndexOf(aPhotoFormats, IO.Path.GetExtension(sPath))) >= 0 Then
iPicture_Verz = IO.Path.GetDirectoryName(sPath)
iPicture.Path = sPath
iPicture.Image = Image.FromFile(sPath)
iPicture.ID = IO.Path.GetFileName(sPath)
'Wen Forhanden Exif infos lesen und eintragen (werden von DB überschrieben, wenn dor ein Wert vorhanden ist)
2015-02-15 05:12:00 +02:00
2015-02-16 02:34:00 +02:00
'Wird hier mit Tagg Bestückt!
' iPicture_Verz wird zum localisieren der INI benötigt
Load_Taggs(iPicture, iPicture_Verz)
2015-02-15 05:12:00 +02:00
2015-02-16 02:34:00 +02:00
LoadPicture = iPicture
Else
MsgBox("Unsupported Format!")
LoadPicture = ""
End If
2015-02-15 05:12:00 +02:00
'Main Work Ende##########################################
Else
MsgBox("Can't load Picture")
LoadPicture = ""
End If
End Function 'LoadPicture
'###################################################################################################################
'############### 2.DirReadPhotos ###################################################################################
'###################################################################################################################
Public Function DirReadPhotos(ByVal sPath As String) As Object
'Parameter: Ordner Pfad
'Return: Array von Pfaden der Bilddateien des Ordners
Dim aPhotos(0) As String
Dim i As Long
Dim sPhotoFormat As String
Dim aPhotoFormats(0) As String 'Array Enthält die Unsterstützten Photoformate
'Lade Unterstüzte Formate:
aPhotoFormats = LoadPicture("-SupportedFormats-")
Try
'Deklarieren
Dim aFiles As String() = Directory.GetFiles(sPath) ' Try verwenden!! <----
'Überprüfen auf existenz des Ordners
'Ja: Weiter
'Nein: MsgBox("Error: Der Pfad existiert Nicht!")
If Directory.Exists(sPath) = True Then
'Speichere Pfad in Array aPhotos
'Wenn das File die Dateiendungen aus Array aPhotoFormats besitzt
Dim nCount As Long = 0
If aFiles(0) <> "" Then
aPhotos(0) = ""
For i = 0 To UBound(aFiles)
For Each sPhotoFormat In aPhotoFormats
If IO.Path.GetExtension(aFiles(i)) = sPhotoFormat Then
2015-02-16 23:54:00 +02:00
If nCount > UBound(aPhotos) Then ReDim Preserve aPhotos(nCount)
aPhotos(nCount) = aFiles(i)
nCount = nCount + 1
2015-02-15 05:12:00 +02:00
End If
Next sPhotoFormat
Next i
Else
aPhotos(0) = ""
End If
'Array Nach Dateinahmen Sortieren
Array.Sort(aPhotos)
Else
MsgBox("Error: Der Pfad existiert Nicht!")
aPhotos(0) = ""
End If
DirReadPhotos = aPhotos
Catch ex As Exception
MsgBox(ex.Message)
aPhotos(0) = ""
DirReadPhotos = aPhotos
End Try
End Function 'DirReadPhotos
2015-02-16 02:34:00 +02:00
'###################################################################################################################
'############### 3.Load_Taggs ###################################################################################
'###################################################################################################################
'Taggs auslesen (jezt noch aus INI - später aus DB)
Private Sub Load_Taggs(ByRef iPicture As TaggedIMG, ByVal DB_Locate As String)
'Grund Vars Deklarieren
Dim ID As String = iPicture.ID
Dim sDB As String = "Tagg.ini"
Dim i As Long
sDB = Path.Combine(DB_Locate, sDB)
If File.Exists(sDB) And ID <> "" Then
'Dekalriere
Dim Mark_ID As String
Dim Mark_PositionX As Long
Dim Mark_PositionY As Long
Dim Mark_Radius As Long
Dim Mark_Description As String
Dim Mark_Index As String
'Titel
2015-02-16 23:54:00 +02:00
iPicture.Title = Modul_Tools.Config_INI_ReadValue(sDB, ID, "Title", Nothing)
2015-02-16 02:34:00 +02:00
'Kurzbeschreibung
'##############################################################
'ReFormate Description Text from "Description"
2015-02-16 23:54:00 +02:00
iPicture.Description = Modul_Tools.Base64_To_Ascii(Modul_Tools.Config_INI_ReadValue(sDB, ID, "Description", Nothing))
2015-02-16 02:34:00 +02:00
'##############################################################
'Zeitangabe
2015-02-16 23:54:00 +02:00
iPicture.Time = Modul_Tools.Config_INI_ReadValue(sDB, ID, "Time", Nothing)
2015-02-16 02:34:00 +02:00
'Ortsangabe-Title
2015-02-16 23:54:00 +02:00
iPicture.Ort.Title = Modul_Tools.Config_INI_ReadValue(sDB, ID, "Place_Title", Nothing)
2015-02-16 02:34:00 +02:00
'Ortsangabe-Adresse
2015-02-16 23:54:00 +02:00
iPicture.Ort.Adresse = Modul_Tools.Config_INI_ReadValue(sDB, ID, "Place_Adresse", Nothing)
2015-02-16 02:34:00 +02:00
'Ortsangabe-Kurzbeschreibung
'##############################################################
'ReFormate Description Text from "Place.Description"
2015-02-16 23:54:00 +02:00
iPicture.Ort.Description = Modul_Tools.Base64_To_Ascii(Modul_Tools.Config_INI_ReadValue(sDB, ID, "Place_Description", Nothing))
2015-02-16 02:34:00 +02:00
'##############################################################
'Ortsangabe-GPS Koordinaten
2015-02-16 23:54:00 +02:00
iPicture.Ort.GPS = Modul_Tools.Config_INI_ReadValue(sDB, ID, "Place_GPS", Nothing)
2015-02-16 02:34:00 +02:00
'Load Marks
'sMark_Index = Modul_Tools.Config_INI_ReadValue(sDB, ID, "Title")
i = 0
Do While i <= 200
Mark_Index = ("Mark" & Convert.ToString(i) & "_ID")
Mark_ID = Modul_Tools.Config_INI_ReadValue(sDB, ID, Mark_Index)
If Mark_ID <> "" Then
i += 1
Mark_PositionX = Convert.ToDouble(Modul_Tools.Config_INI_ReadValue(sDB, ID, "Mark" & Convert.ToString(i) & "_PositionX", "0"))
Mark_PositionY = Convert.ToInt32(Modul_Tools.Config_INI_ReadValue(sDB, ID, "Mark" & Convert.ToString(i) & "_PositionY", "0"))
Mark_Radius = Convert.ToInt32(Modul_Tools.Config_INI_ReadValue(sDB, ID, "Mark" & Convert.ToString(i) & "_Radius", "0"))
'##############################################################
'ReFormate Description Text from "Mark_Description"
2015-02-16 23:54:00 +02:00
Mark_Description = Modul_Tools.Base64_To_Ascii(Modul_Tools.Config_INI_ReadValue(sDB, ID, "Mark" & Convert.ToString(i) & "_Description", Nothing))
2015-02-16 02:34:00 +02:00
'##############################################################
'Erstellen eines Neuen Marks
iPicture.Create_NewMark(Mark_ID, Mark_PositionX, Mark_PositionY, Mark_Radius, Mark_Description)
Else
'Verlasse Schleife
Exit Do
End If
Loop
i = 0
End If
End Sub
'###################################################################################################################
'############### 4.Save_Taggs ###################################################################################
'###################################################################################################################
2015-02-16 23:54:00 +02:00
Public Sub Save_Taggs(ByVal iPicture As TaggedIMG, ByVal DB_Locate As String)
2015-02-16 02:34:00 +02:00
'Grund Vars Deklarieren
Dim ID As String = iPicture.ID
Dim sDB As String = "Tagg.ini"
Dim i As Long
sDB = Path.Combine(DB_Locate, sDB)
If (ID <> "") And (Not File.Exists(sDB)) Then
File.Create(sDB)
'Titel
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Title", iPicture.Title)
2015-02-16 02:34:00 +02:00
'Kurzbeschreibung
'##############################################################
'Formate Description Text from "Description"
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Description", Modul_Tools.Ascii_To_Base64(iPicture.Description))
2015-02-16 02:34:00 +02:00
'##############################################################
'Zeitangabe
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Time", iPicture.Time)
2015-02-16 02:34:00 +02:00
'Ortsangabe-Title
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Place_Title", iPicture.Ort.Title)
2015-02-16 02:34:00 +02:00
'Ortsangabe-Adresse
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Place_Adresse", iPicture.Ort.Adresse)
2015-02-16 02:34:00 +02:00
'Ortsangabe-Kurzbeschreibung
'##############################################################
'Formate Description Text from "iPicture.Place.Description"
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Place_Description", Modul_Tools.Ascii_To_Base64(iPicture.Ort.Description))
2015-02-16 02:34:00 +02:00
'##############################################################
'Ortsangabe-GPS Koordinaten
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Place_GPS", iPicture.Ort.GPS)
2015-02-16 02:34:00 +02:00
'Save Marks
i = 0
2015-02-16 23:54:00 +02:00
If iPicture.Markierung(0).ID <> "" Then
For i = 0 To UBound(iPicture.Markierung)
2015-02-16 02:34:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Mark" & i & "_ID", Convert.ToString(i))
2015-02-16 23:54:00 +02:00
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Mark" & i & "_PositionX", Convert.ToString(iPicture.Markierung(i).PositionX))
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Mark" & i & "_PositionY", Convert.ToString(iPicture.Markierung(i).PositionY))
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Mark" & i & "_Radius", Convert.ToString(iPicture.Markierung(i).Radius))
Modul_Tools.Config_INI_WriteValue(sDB, ID, "Mark" & i & "_Description", Modul_Tools.Ascii_To_Base64(iPicture.Markierung(i).Description))
2015-02-16 02:34:00 +02:00
Next i
End If
i = 0
End If
End Sub
2015-02-15 05:12:00 +02:00
'Vor VBA AND VB without .Net
'### with .Net: Imports System.IO; Directory.Exists(Path)####
'Private Function FileExists(ByVal FileName As String) As Boolean
' On Error Resume Next
' FileExists = Not CBool(GetAttr(FileName) And (vbDirectory Or vbVolume))
' On Error GoTo 0
'End Function
'### with .Net: Imports System.IO; File.Exists(Path)####
'Private Function DirExists(ByVal DirectoryName As String) As Boolean
' On Error Resume Next
' DirExists = CBool(GetAttr(DirectoryName) And vbDirectory)
' On Error GoTo 0
'End Function
End Module