vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tipp 1573: Blockierung von Bilddateien verhindern (VB.NET)3.576Manfred X26.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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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