| |
| In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.
Hinweis: Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden! | Fragen zu Tipps & Tricks und Workshops im vb@rchivTipp 1573: Blockierung von Bilddateien verhindern (VB.NET) | | | Autor: Manfred X | Tipp anzeigenDatum: 26.03.14 23:45 |
| In der Dokumentation des Konstruktors der Drawing.Bitmap-Klasse,
die einen Stream als Parameter akzeptiert, steht:
[I]Der Stream muss für die Lebensdauer der Bitmap geöffnet bleiben.[/I]
Schließt man den Stream, ehe die Lebensdauer der Bitmap endet,
stehen einige Methoden dieser Klasse nicht mehr zur Verfügung -
z.B. "RotateFlip", "MakeTransparent" oder "Save".
Es wird eine Exception geworfen:
"Auf einen geschlossenen Stream kann nicht zugegriffen werden."
Um ein Bild aus einer Datei in einer Picturebox anzuzeigen,
kann die "ImageLocation"-Eigenschaft des Control verwendet werden.
Die Datei wird dadurch nicht gesperrt.
Um die Datei-Freigabe nach dem Laden zu ermöglichen, kann der
geöffnete "Filestream" zunächst in einen "Memorystream" kopiert werden,
aus dem die Bitmap erstellt wird. Diese Operationen kapselt die
Klasse "PicStream".
Die Eigenschaften "GetRef" und "GetClone" liefern eine Referenz oder einen
Klon der geladenen Bitmap.
Public Class PicStream
Implements IDisposable
Dim _picstream As System.IO.MemoryStream
Dim _picloaded As System.Drawing.Bitmap
''' <summary>Laden eines Bildes aus einer Bilddatei</summary>
''' <param name="filename">Name der Bilddatei</param>
Public Sub New(ByVal filename As String)
If Not System.IO.File.Exists(filename) Then
Throw New IO.FileNotFoundException("Datei nicht vorhanden")
End If
Using fs As New System.IO.FileStream(filename, _
IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
_picstream = New System.IO.MemoryStream
'Bilddaten im Hauptspeicher aufbewahren
fs.CopyTo(_picstream)
_picloaded = New Bitmap(_picstream, False)
End Using
End Sub
''' <summary>Abfrage eines geklonten Bitmap-Objekts mit Bilddaten</summary>
Public ReadOnly Property GetClone() As Bitmap
Get
Return CType(_picloaded.Clone, Bitmap)
End Get
End Property
''' <summary>Abfrage einer Referenz auf die Bilddaten</summary>
Public ReadOnly Property GetRef() As Bitmap
Get
Return _picloaded
End Get
End Property
''' <summary>Speichert das geladene Bild in einer Datei</summary>
''' <param name="filename">Name der Datei, in der das Bild gespeichert
' wird</param>
Public Sub save(ByVal filename As String)
If Not _picloaded Is Nothing Then
_picloaded.Save(filename)
End If
End Sub
''' <summary>Speichert das geladene Bild in einer Datei</summary>
''' <param name="filename">Name der Datei, in der das Bild gespeichert
' wird</param>
''' <param name="fmt">Format des zu speichernden Bildes</param>
Public Sub save(ByVal filename As String, ByVal fmt As Imaging.ImageFormat)
If Not _picloaded Is Nothing Then
_picloaded.Save(filename, fmt)
End If
End Sub
#Region "IDisposable Support"
Private disposedValue As Boolean ' So ermitteln Sie überflüssige Aufrufe
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
'Bitmap- und Stream-Ressourcen ggf. freigeben
If _picloaded IsNot Nothing Then _picloaded.Dispose()
If _picstream IsNot Nothing Then _picstream.Close()
End If
End If
Me.disposedValue = True
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
End Class | |
Tipp 1573: Blockierung von Bilddateien verhindern (VB.NET) | 3.576 | Manfred X | 26.03.14 23:45 |
| Sie sind nicht angemeldet! Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|