Im Zentrum dieses Projektes steht die Anzeige eines Bildes, dem ein Bild-Schatten hinzugefügt wird. Das Original-Bild sollte bestimmte Voraussetzungen – wie einen transparenten Hintergrund – erfüllen, damit die Zugabe des Bildschattens einen guten Effekt liefert.
Abbildung 23.3.5.5.1: Original-Bild
Abbildung 23.3.5.5.2: Original-Bild mit Schatten
Die Schatten-Wirkung zeigt sich am deutlichsten, wenn Sie das Projekt starten und sich beide Bilder nacheinander ansehen.
Das erste Projekt verwendet das (Teil-)Programm 'convert' aus der Programm-Sammlung 'ImageMagick', das daher notwendigerweise auf Ihrem System installiert sein muss. Das Programm und dessen Dokumentation können Sie unter Ubuntu über diese Anweisung installieren:
sudo apt-get install imagemagick imagemagick-doc
Wollen Sie das externe Programm nicht einsetzen, dann existiert im zweiten Abschnitt noch ein weiteres Projekt, das nur Methoden von Gambas verwendet.
Quelltext 1:
[1] ' Gambas class file [2] [3] Public Sub Form_Open() [4] Me.Center [5] Me.Resizable = False [6] picBox.Picture = Picture[Application.Path & "/logo.png"] [7] If Exist(Application.Path & "/logos.png") Then [8] Kill Application.Path & "/logos.png" [9] Endif [10] btnGenerateShadow.Text = "Schatten ein ..." [11] End ' Form_Open() [12] [13] Public Sub btnGenerateShadow_Click() [14] Dim sCommand As String [15] [16] ' Das Programm 'convert' muss auf dem System installiert sein [17] sCommand = "convert -background gray -shadow 80x3 " & Application.path & "/logo.png " & Application.path & "/logos.png" [18] Shell sCommand Wait [19] MakeShadow [20] [21] End ' btnGenerateShadow_Click() [22] [23] Public Sub MakeShadow() [24] Dim Foreground, Shadow, hImage As Image [25] [26] Shadow = Image.Load(Application.path & "/logos.png") [27] Foreground = Image.Load(Application.path & "/logo.png") [28] [29] If btnGenerateShadow.Text = "Schatten ein ..." Then [30] hImage = Shadow.Copy() [31] hImage.PaintImage(Foreground, 0, 0) [32] btnGenerateShadow.Text = "Schatten aus ..." [33] Else [34] hImage = Foreground.Copy() [35] btnGenerateShadow.Text = "Schatten ein ..." [36] Endif [37] [38] picBox.Picture = hImage.Picture [39] [40] End ' MakeShadow()
Kommentar:
In der folgenden Variante von Tobias Boege und Ingo Beckert kommen nur Methoden von Gambas zum Einsatz, um den gleichen Schatten-Effekt zu erzeugen.
Abbildungen 23.3.5.5.3: Original-Bild und Bild mit Schatten
Auch der Quelltext 2 für das alternative Projekt wird hier vollständig angegeben:
[1] ' Gambas class file [2] [3] Public Sub Form_Open() [4] Me.Center [5] Me.Resizable = False [6] picBox.Picture = Picture[Application.Path & "/logo.png"] [7] btnGenerateShadow.Text = "Schatten ein ..." [8] End ' Form_Open() [9] [10] Public Sub btnGenerateShadow_Click() [11] MakeShadow [12] End ' btnGenerateShadow_Click() [13] [14] Public Sub MakeShadow() [15] Dim Foreground, hImage As Image [16] [17] Foreground = Image.Load(Application.path & "/logo.png") [18] [19] If btnGenerateShadow.Text = "Schatten ein ..." Then [20] hImage = Foreground.Copy() [21] hImage.PaintImage(Foreground, 0, 0) [22] picBox.Picture = AddShadow(picBox.Picture.Image).Picture [23] btnGenerateShadow.Text = "Schatten aus ..." [24] Else [25] hImage = Foreground.Copy() [26] picBox.Picture = hImage.Picture [27] btnGenerateShadow.Text = "Schatten ein ..." [28] Endif [29] [30] End ' MakeShadow() [31] [32] Public Function AddShadow(hImage As Image) As Image [33] Dim hNewImage As New Image(hImage.W, hImage.H) [34] [35] Paint.Begin(hNewImage) [36] Paint.DrawImage(Shadow(hImage), 4, 4) [37] Paint.DrawImage(hImage, 0, 0) [38] Paint.End() [39] Return hNewImage [40] [41] End ' AddShadow(hImage As Image) As Image [42] [43] Public Function Shadow(hImage As Image) As Image [44] Dim hShadow As Image = hImage.Copy() [45] [46] hShadow.Fuzzy(3) [47] hShadow.Colorize(Color.Gray) [48] hShadow.Opacity(0.5) [49] Return hShadow [50] [51] End ' Shadow(hImage As Image) As Image