3 Stimmen

Wie speichert man BitmapImage / WriteableBitmap mit SaveFileDialog in Silverlight 3.0?

Wie kann eine WriteableBitmap von Silverlight auf das Dateisystem gespeichert werden, ich bin unsicher, was mit dem FileStream zu tun, um diese Arbeit zu machen, kann es in Bitmap, PNG, Jpeg-Format usw. sein, solange eine kommerzielle Bibliothek nicht erforderlich ist.
Ist es möglich, dies zu tun?

Hier ist mein Aufruf von SaveDialog, unten:

    Dim SaveDialog As New SaveFileDialog
    If SaveDialog.ShowDialog Then
        Try
            Using FileStream As Stream = SaveDialog.OpenFile
               ' Save Image File Code Here
            End Using
        Catch ex As Exception

        End Try
    End If

Modifier

Erwähnung von WritableBitmap hinzugefügt, da dies ist, was meine XAML zu schreiben, ich brauche nur Es gibt eine WriteableBitmap.Pixels-Eigenschaft, bei der es sich um ein 1-dimensionales Array von Integer-Pixeln handelt. Kann dies in einen Dateistrom übertragen werden, und wenn ja, wie?


Hier ist ein Beispielcode, der den Pixel Stream in eine Datei schreibt, obwohl dies funktioniert, werden die Daten nicht "bitmapifiziert" und die resultierende Ausgabe ist unbrauchbar, aber es schreibt meinen Bildstrom, ich muss nur Ich muss nur wissen, wie ich es so markieren kann, dass es eine Bitmap-Datei (oder etwas anderes) ist. Ich habe die JPEG- und PNG-Beispiele gefunden, aber keiner von ihnen erklärt gut, wie sie funktionieren, muss ich vielleicht die PNGEncoding-Methode verwenden, da dies die einzige ist, die in meine Codebasis integriert wird. Aber gibt es eine einfache BMP-Dateiversion da draußen?

        Dim Image As Imaging.WriteableBitmap = _Style.Image
        Dim Area As Integer = Image.PixelWidth * Image.PixelHeight
        For Raster As Integer = 0 To Area - 1
            Dim Pixel As Integer = Image.Pixels(Raster)
            Dim Bytes() = BitConverter.GetBytes(Pixel And &HFF)
            FileStream.Write(Bytes, 0, 4)
        Next

2voto

Dave Swersky Punkte 34052

Es gibt eine Reihe von Open-Source-Encodern:

FJCore: http://code.google.com/p/fjcore/

Joe Stegman's PNG Encoder: http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx

FreeImage: http://freeimage.sourceforge.net/

Sie können diese zum Kodieren verschiedener Formate verwenden. Hier ist ein Beitrag über das Speichern einer WriteableBitmap, sobald sie gebacken ist:

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/03/18/Silverlight-3- 1320 -The-Bitmap-API- 2F00 -SchreibbareBitmap.aspx

UPDATE: Nach weiteren Recherchen sieht es so aus, als ob das Speichern einer WriteableBitmap in eine Datei in SL3 aufgrund von Sicherheitsproblemen eingeschränkt ist. Es gibt einen Workaround:

http://geekswithblogs.net/braulio/archive/2009/07/12/export-canvas-to-png-and-save-it-in-your-local.aspx

Sieht so aus, als müssten Sie den Inhalt eines Canvas in einer Datei speichern. Sie sollten in der Lage sein, das Beispiel zu ändern, um JPEG oder andere Formate zu speichern.

1voto

John Punkte 28172

Ich habe zuvor diesen Beitrag geschrieben, der zeigt, wie man XAML in einer Bitmap speichert, indem man eine beschreibbare Bitmap, das Speicherdialogfeld und FJCore verwendet.

http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X