Comment sauver BitmapImage / WriteableBitmap en utilisant SaveFileDialog dans Silverlight 3.0?
-
21-09-2019 - |
Question
Comment un WriteableBitmap de Silverlight être enregistrées sur le système de fichiers, je ne suis pas sûr de quoi faire avec le FileStream pour faire ce travail, il peut être dans Bitmap, PNG, Jpeg etc, aussi longtemps qu'une bibliothèque commerciale n'est pas nécessaire.
Est-il possible de le faire?
Voici mon appel à SaveDialog, ci-dessous:
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
mention ajoutée de WritableBitmap que c'est ce que mon XAML est en train d'écrire, je dois juste pour le sauver, il y a une propriété WriteableBitmap.Pixels qui est un tableau 1 dimensions de pixels entiers, ceci peut être mis en filestream, et si oui, comment?
Voici quelques exemples de code j'écrit que le flux de pixels à un Fichier, mais cela fonctionne, il n'a pas « bitmapify » les données et la sortie résultante est inutile, mais il est en train d'écrire mon flux d'images, je viens besoin de savoir comment marquer-it-up de sorte qu'il est un fichier Bitmap (ou autre). J'ai trouvé les exemples JPEG et PNG avant, mais aucun d'entre eux bien expliquer comment ils fonctionnent, je dois utiliser la méthode PNGEncoding comme cela est le seul qui intégrera dans mon code de base. Mais est-il une version simple de fichier BMP là-bas?
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
La solution
Il y a plusieurs codeurs open-source là-bas:
FJCore: http://code.google.com/p/fjcore/
PNG Joe Stegman encodeur: http://freeimage.sourceforge.net/
Vous pouvez utiliser l'un de ces formats pour encoder différents. Voici un post sur l'enregistrement d'une WriteableBitmap une fois qu'il est cuit:
Mise à jour: Après avoir fait un peu plus de recherche, il ressemble à l'enregistrement d'une WriteableBitmap dans un fichier est limité dans SL3 en raison de problèmes de sécurité. Il existe une solution:
On dirait que vous devez enregistrer le contenu d'une toile dans un fichier. Vous devriez être en mesure de modifier l'échantillon pour enregistrer une image JPEG ou d'autres formats.
Autres conseils
Je l'ai déjà écrit ce post qui passe par la façon de sauver XAML à un bitmap à l'aide d'un bitmap inscriptible, la boîte de dialogue Enregistrer et FJCore.
http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/