Guten Morgen,
Ich hab seit ein gestern ein Problem welches mich zum verzweifeln bringt.
Und zwar öffnet der Benutzer sein Bild und dann wird nur ein Teil davon angezeigt, so weit so gut. Will er jedoch das Bild bearbeiten (oder bessergesagt wenn mein Programm das Bild überschreiben will), kommt "Allgemeiner Fehler in GDI+". Dadurch das ich das Bild nicht bearbeiten kann würde ich sagen das, dass Programm die Datei nicht richtig frei gibt.
Im Internet hab ich was mit FileStream gefunden. Würde ich die Datei sofort wieder ausgeben funktioniert es mit FileStream, aber dem ich Klone mach (oder was auch immer der Fehler beginnt) funktioniert das nicht mehr. Zudem hab ich noch wenig erfahrung mit FileStream.
Derzeiten Quelltext:
Vielen Dank für euche Zeit!
Ich hab seit ein gestern ein Problem welches mich zum verzweifeln bringt.
Und zwar öffnet der Benutzer sein Bild und dann wird nur ein Teil davon angezeigt, so weit so gut. Will er jedoch das Bild bearbeiten (oder bessergesagt wenn mein Programm das Bild überschreiben will), kommt "Allgemeiner Fehler in GDI+". Dadurch das ich das Bild nicht bearbeiten kann würde ich sagen das, dass Programm die Datei nicht richtig frei gibt.
Im Internet hab ich was mit FileStream gefunden. Würde ich die Datei sofort wieder ausgeben funktioniert es mit FileStream, aber dem ich Klone mach (oder was auch immer der Fehler beginnt) funktioniert das nicht mehr. Zudem hab ich noch wenig erfahrung mit FileStream.
Derzeiten Quelltext:
VB.NET-Quellcode
- Dim Width_Ende As String = NumericUpDown3.Value * NumericUpDown1.Value + NumericUpDown3.Value
- Dim Height_Ende As String = NumericUpDown4.Value * NumericUpDown2.Value + NumericUpDown4.Value
- Dim Width_Ende2 As String = NumericUpDown1.Value
- Dim Height_Ende2 As String = NumericUpDown2.Value
- Dim Width_Start As String = Width_Ende - NumericUpDown1.Value - 1
- Dim Height_Start As String = Height_Ende - NumericUpDown1.Value - 1
- If CheckBox1.Checked = True Then
- Width_Ende2 = NumericUpDown1.Value + 1
- Height_Ende2 = NumericUpDown1.Value + 1
- End If
- Try
- Dim fs As System.IO.FileStream
- fs = New System.IO.FileStream(Image, IO.FileMode.Open, IO.FileAccess.Read)
- Dim myBitmap As New Bitmap(fs)
- Dim gr As Graphics = Graphics.FromImage(myBitmap)
- Dim cloneRect As New Rectangle(Width_Start, Height_Start, Width_Ende2, Height_Ende2)
- Dim format As PixelFormat = myBitmap.PixelFormat
- Dim cloneBitmap As Bitmap = myBitmap.Clone(cloneRect, format)
- Width_With_GridLine.Text = ""
- Height_With_GridLine.Text = ""
- If CheckBox1.Checked = True Then
- Dim test As Graphics = Graphics.FromImage(cloneBitmap)
- Dim LinePunkt1 As New Point(NumericUpDown1.Value, 0)
- Dim LinePunkt2 As New Point(NumericUpDown1.Value, NumericUpDown2.Value)
- Dim LinePunkt3 As New Point(0, NumericUpDown2.Value)
- Dim LinePunkt4 As New Point(NumericUpDown1.Value, NumericUpDown2.Value)
- test.DrawLine(Pens.Yellow, LinePunkt1, LinePunkt2)
- test.DrawLine(Pens.Yellow, LinePunkt3, LinePunkt4)
- Width_With_GridLine.Text = "(" & cloneBitmap.Width & " mit GridLines)"
- Height_With_GridLine.Text = "(" & cloneBitmap.Height & " mit GridLines)"
- End If
- If CheckBox2.Checked = True Then
- cloneBitmap.MakeTransparent(Color.Black)
- End If
- gr.DrawImage(cloneBitmap, 0, 0)
- PictureBox1.Image = cloneBitmap
- ImageName.Text = Split(TextBox1.Text, "\")(Split(TextBox1.Text, "\").Count - 1) 'Nicht den besten weg (weis ich jetzt auch)
- BoxWidthLabel.Text = NumericUpDown1.Value
- BoxHeightLabel.Text = NumericUpDown2.Value
- RowLabel.Text = NumericUpDown3.Value
- ColLabel.Text = NumericUpDown4.Value
- ImageNewName.Text = ""
- ImageName.Visible = True
- 'Jede menge auf True setzten
- PictureBox1.Padding = New Padding(PictureBox1.Width / 2 - cloneBitmap.Width / 2, PictureBox1.Height / 2 - cloneBitmap.Height / 2, PictureBox1.Width / 2 - cloneBitmap.Width / 2, PictureBox1.Height / 2 - cloneBitmap.Height / 2)
- fs.Close()
Vielen Dank für euche Zeit!