' Gambas class file

PUBLIC imgTestbild AS Image
PUBLIC sBildExtension AS String
PRIVATE sTempDateiPfad AS String

PUBLIC SUB Form_Open()
  FMain.Center
  imgTestbild = Image.Load(Application.Path & "/Bilder/herrlehmann.jpg")
  PictureBox1.Picture = imgTestbild.Picture
  optPNG.Value = TRUE
  sBildExtension = "png"  
END ' Form_Open

PRIVATE FUNCTION DateiFilter(OPTIONAL Alle AS Boolean = FALSE) AS String[]
  DIM aBildfilterMatrix AS NEW String[]
  IF Alle = TRUE THEN 
    aBildfilterMatrix.Add("*.png *.jpeg *.jpg *.bmp *.gif *.xpm")
    aBildfilterMatrix.Add("Bild-Typ")
  ENDIF
  aBildfilterMatrix.Add("*.png")
  aBildfilterMatrix.Add("Portable Network Graphics")
  aBildfilterMatrix.Add("*.jpeg; *.jpg")
  aBildfilterMatrix.Add("Joint Photographic Experts Group")
  aBildfilterMatrix.Add("*.bmp")
  aBildfilterMatrix.Add("Windows Bitmap")
  aBildfilterMatrix.Add("*.gif")
  aBildfilterMatrix.Add("Graphics Interchange Format")
  aBildfilterMatrix.Add("*.xpm")
  aBildfilterMatrix.Add("X PixMap")
  IF Alle = TRUE THEN
     aBildfilterMatrix.Add("*") 
     aBildfilterMatrix.Add("Alle Dateien")
  ENDIF
  
  RETURN aBildfilterMatrix
  
END ' DateiFilter erzeugen

PUBLIC SUB btnBildLaden_Click()
 DIM imgBild1 AS Image
 DIM fBildformat AS Float ' <--- Querformat oder Hochformat
 DIM picBild1 AS Picture

  Dialog.Filter = DateiFilter(TRUE)
  Dialog.Path = User.Home
  Dialog.Title = "Wählen Sie ein Bild aus!"
  IF Dialog.OpenFile() THEN RETURN 
  TRY imgBild1 = Image.Load(Dialog.Path)
  IF ERROR THEN Message.Error("Fehler(load): " & Error.Text & Chr(10) & "  Fehlerquelle: " & Error.Where)
  ' Das geladene Image wird in ein Picture konvertiert und in der PictureBox1 angezeigt
  PictureBox1.Picture = imgBild1.Picture 
  ' Alternative:
  ' picBild1 = imgBild1.Picture 
  ' PictureBox1.Picture = picBild1
  
  ' Das geladene Bild imgBild1 wird temporär gespeichert
  sTempDateiPfad = Temp() & File.Name(Dialog.Path) ' <-- Temp() &/ führt zu einem Fehler!
  ' GIF-Bilder werden NICHT abgespeichert. Es folgt eine Fehlermeldung!
  TRY imgBild1.Save(sTempDateiPfad)
  IF ERROR THEN Message.Error("Fehler(save): " & Error.Text & Chr(10) & "  Fehlerquelle: " & Error.Where)
  ' BildWeite und Bildhöhe auslesen und in 2 Textboxen anzeigen
  txtBildweiteOriginal.Text = Str(imgBild1.Width)
  txtBildhoeheOriginal.Text = Str(imgBild1.Height)  
  
  fBildformat = imgBild1.Width / imgBild1.Height 
  
  IF fBildformat < 1 THEN 
     txtBildtyp.Text = Upper(File.Ext(Dialog.Path)) & ", Hochformat"
  ELSE IF fBildformat = 1 THEN 
     txtBildtyp.Text = Upper(File.Ext(Dialog.Path)) & ", Quadrat-Format"
  ELSE 
     txtBildtyp.Text = Upper(File.Ext(Dialog.Path)) & ", Querformat"
  ENDIF 
  
END  ' BildLaden


' Helligkeit
PUBLIC SUB Slider1_Change()
  ' imgTestbild = Application.Path & "/Bilder/herrlehmann.jpg"
  ' imgTestbild.Balance(Slider1.Value / 100, Slider2.Value / 100, Slider3.Value / 100)
  ' PictureBox2.Picture = imTestbild.Picture
END

' Kontrast
PUBLIC SUB Slider2_Change()
  ' imTestbild = Image.Load(chemin)
  ' imTestbild.Balance(Slider1.Value / 100, Slider2.Value / 100, Slider3.Value / 100)
  ' PictureBox2.Picture = imTestbild.Picture
END

' Gamma-Wert
PUBLIC SUB Slider3_Change()
  ' imTestbild = Image.Load(chemin)
  ' imTestbild.Balance(Slider1.Value / 100, Slider2.Value / 100, Slider3.Value / 100)
  ' PictureBox2.Picture = imTestbild.Picture
END

' Graustufenbild
PUBLIC SUB Button3_Click()
  ' imTestbild = Image.Load(chemin)
  ' imTestbild.Gray()
  ' PictureBox2.Picture = imTestbild.Picture
END


PUBLIC SUB btnBildStrecken_Click()
  DIM imgBild2 AS Image
  DIM iSkalierungsfaktor, iBildbreite, iBildhoehe AS Integer
  
  imgBild2 = Image.Load(sTempDateiPfad)
  
  'IF (imBild2AlsImage.Width / imBild2AlsImage.Height) >= 1 THEN 
     iSkalierungsfaktor = imgBild2.Width / CInt(txtBildweiteNeu.Text)
     iBildbreite = CInt(txtBildweiteNeu.Text) ' <--- absoluter Wert
     iBildhoehe = imgBild2.Height / iSkalierungsfaktor ' <--- relativer Wert!
     
     ' Syntax: Strech(Weite, Höhe, Glättung(ja/nein)) 
     imgBild2 = imgBild2.Stretch(iBildbreite, iBildhoehe, TRUE)
     ' Das geänderte Image wird in ein Picture konvertiert und angezeigt
     PictureBox2.Picture = NULL
     PictureBox2.Refresh
     PictureBox2.Picture = imgBild2.Picture 
     
     ' Das geänderte Bild wird ohne Dialog gespeichert und überschreibt ein vorhandenes Bild!
     TRY imgBild2.Save(User.Home &/ "bild123." & sBildExtension)
     IF ERROR THEN Message.Error("Fehler(save): " & Error.Text & Chr(10) & "  Fehlerquelle: " & Error.Where)
     

  'ENDIF 

END ' BildStrecken

PUBLIC SUB Menu2_Click()
  FMain.Close
END

PUBLIC SUB Form_Close()
  IF Exist(sTempDateiPfad) THEN 
     KILL sTempDateiPfad ' <--- Zur Kontrolle: PRINT "Sie existiert..."
  ENDIF 
END

PUBLIC SUB optPNG_Click()
  sBildExtension = "png"
END

PUBLIC SUB optJPG_Click()
  sBildExtension = "jpg"
END

PUBLIC SUB optGIF_Click()
  sBildExtension = "gif"
END

PUBLIC SUB optXPM_Click()
  sBildExtension = "xpm"
END
