Hallo zusammen,
wollte mir mal schnell ein Steuerelement (Projektvorlage: Windows-Forms-Steuerelementbibliothek(.Net Framework), Framework 4.8) basteln, welches eine verbesserte Picturebox darstellt. (Aber hier sind in diesem Satz ja schon diverse Fehler drin).
Habe es auch soweit hinbekommen, dass ich das Bild um 90, 180, 270 Grad drehen und auch horizontal und vertikal spiegeln kann. Sie weit so gut.
Bei jeder Veränderung speichere ich mir den aktuellen sichtbaren Zustand auch in dem Ursprungsdateinamen ab. (Ich möchte ja nicht x Varianten an Dateien von diesem Bild haben)
Wenn ich das neue Steuerelement nun in einem Testprojekt einfüge, dann bekomme ich die Fehlermeldung "System.Runtime.InteropServices.ExternalException: "Allgemeiner Fehler in GDI+."".
Mein Control lädt ganz am Anfang eine Grafik und zeigt diese natürlich auch an.
Was ich jetzt nicht so ganz verstehe ist folgendes: Wenn ich mein Controll, als Admin natürlich, starte, funktioniert in der Vorschau das Drehen und abspeichern in allen Richtungen einwandfrei. Auch die Datei selbst ist im Explorer dann richtig in der Vorschau zu sehen.
Hier einmal der Code
Spoiler anzeigen
Jetzt zu meinen Fragen:
1. Wo liegt der Fehler?
2. Wie kann ich ein Bild so laden, drehen und wieder abspeichern, dass dieser Fehler nicht mehr auftritt.
Was mir natürlich schon klar ist, dass wenn ich später einmal ein und das gleiche Steuerelement in zwei oder mehreren dieser neuen Steuerelemente geladen habe, dass ich hiermit mir natürlich immer mit einer Aktion in der einen Box die anderen Inhalte nicht verändere bzw. wenn ich in einer der anderen Boxen eine Veränderung durchführe, dies auch Auswirkungen auf die gespeicherte Datei hat. Diese doppelte Benutzung einer gleichen Datei muss aber die Anwendung selbst übernehmen und kann nicht Aufgabe des Steuerelementes sein (oder geht dies auch?).
Da ich mal das Testprojekt und ein Anzeigeprojekt angefügt habe, hoffe ich mal, dass Ihr mein Problem hiermit schnell nachvollziehen könnt.
Natürlich habe ich auch die beiden Häkchen gesetzt, die für ein Steuerelement erforderlich sind.
Vielen Dank erst einmal.
Volker
*EXE-Anhang entfernt, Topic verschoben*
wollte mir mal schnell ein Steuerelement (Projektvorlage: Windows-Forms-Steuerelementbibliothek(.Net Framework), Framework 4.8) basteln, welches eine verbesserte Picturebox darstellt. (Aber hier sind in diesem Satz ja schon diverse Fehler drin).
Habe es auch soweit hinbekommen, dass ich das Bild um 90, 180, 270 Grad drehen und auch horizontal und vertikal spiegeln kann. Sie weit so gut.
Bei jeder Veränderung speichere ich mir den aktuellen sichtbaren Zustand auch in dem Ursprungsdateinamen ab. (Ich möchte ja nicht x Varianten an Dateien von diesem Bild haben)
Wenn ich das neue Steuerelement nun in einem Testprojekt einfüge, dann bekomme ich die Fehlermeldung "System.Runtime.InteropServices.ExternalException: "Allgemeiner Fehler in GDI+."".
Mein Control lädt ganz am Anfang eine Grafik und zeigt diese natürlich auch an.
Was ich jetzt nicht so ganz verstehe ist folgendes: Wenn ich mein Controll, als Admin natürlich, starte, funktioniert in der Vorschau das Drehen und abspeichern in allen Richtungen einwandfrei. Auch die Datei selbst ist im Explorer dann richtig in der Vorschau zu sehen.
Hier einmal der Code
VB.NET-Quellcode
- Imports System.Drawing.Imaging
- Public Class UserControl1
- Public bmp As Bitmap
- Public Aktuelles_Bild As String
- Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ' WEBP Konvertierung auch auf PNG möglich. Daher über die Eigenschaften die Wahl einstellen, was gewünscht ist (JPG, PNG oder Abfrage nach diesen beiden Typen)
- Aktuelles_Bild = "C:\Users\volke\source\repos\Test\BildzumTesten.jpg"
- ' aktuelles Bild in einer Variable spreichern
- bmp = New Bitmap(Aktuelles_Bild)
- PictureBox1.Image = bmp
- End Sub
- Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
- ' Das Bild drehen
- bmp.RotateFlip(RotateFlipType.Rotate90FlipNone) ' hier das richtige raussuchen
- ' und so gedreht abspeichern
- '''''''''''''''''''''''''''''''''''''''''''''
- ' Hier tritt der Fehler auf
- '''''''''''''''''''''''''''''''''''''''''''''
- bmp.Save(Aktuelles_Bild, ImageFormat.Jpeg)
- ' Das gedrehte Bild nun anzeigen
- Me.PictureBox1.Image = bmp
- End Sub
- End Class
Jetzt zu meinen Fragen:
1. Wo liegt der Fehler?
2. Wie kann ich ein Bild so laden, drehen und wieder abspeichern, dass dieser Fehler nicht mehr auftritt.
Was mir natürlich schon klar ist, dass wenn ich später einmal ein und das gleiche Steuerelement in zwei oder mehreren dieser neuen Steuerelemente geladen habe, dass ich hiermit mir natürlich immer mit einer Aktion in der einen Box die anderen Inhalte nicht verändere bzw. wenn ich in einer der anderen Boxen eine Veränderung durchführe, dies auch Auswirkungen auf die gespeicherte Datei hat. Diese doppelte Benutzung einer gleichen Datei muss aber die Anwendung selbst übernehmen und kann nicht Aufgabe des Steuerelementes sein (oder geht dies auch?).
Da ich mal das Testprojekt und ein Anzeigeprojekt angefügt habe, hoffe ich mal, dass Ihr mein Problem hiermit schnell nachvollziehen könnt.
Natürlich habe ich auch die beiden Häkchen gesetzt, die für ein Steuerelement erforderlich sind.
Vielen Dank erst einmal.
Volker
*EXE-Anhang entfernt, Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()