Cómo ahorrar BitmapImage / WriteableBitmap usando SaveFileDialog en Silverlight 3.0?
-
21-09-2019 - |
Pregunta
¿Cómo puede un WriteableBitmap de Silverlight se guardará en el sistema de archivos, no estoy seguro de qué hacer con el FileStream para hacer este trabajo, puede ser en Bitmap, PNG, JPEG, etc, siempre y cuando una biblioteca comercial no es requerido.
¿Es posible hacer esto?
Esta es mi llamada a SaveDialog, a continuación:
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
Editar
Alta mención WritableBitmap ya que esto es lo que mi XAML está escribiendo, acabo de necesidad Para guardarlo, hay una propiedad WriteableBitmap.Pixels que es una matriz de 1-dimensional de píxeles enteros, puede esto ser puesto en un filestream, y si es así, ¿cómo?
Aquí hay un código ejemplo tengo que escribe el flujo de píxeles a una Archivo, sin embargo, esto funciona no "bitmapify" los datos y la salida resultante es inútil, sino que está escribiendo mi flujo de imagen, sólo necesidad de saber cómo marcar-it-up por lo que es un archivo de mapa de bits (o cualquier otra cosa). He encontrado los ejemplos JPEG y PNG antes, pero ninguno de ellos explicar bien cómo funcionan, puede que tenga que utilizar el método PNGEncoding ya que este es el único que va a integrar en mi base de código. Pero, ¿existe una versión simple archivo BMP por ahí?
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
Solución
Hay varios codificadores de código abierto por ahí:
FJCore: http://code.google.com/p/fjcore/
Joe Stegman PNG Encoder: http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx
FreeImage: http://freeimage.sourceforge.net/
Se puede utilizar cualquiera de ellos para codificar varios formatos. Aquí hay un post en el ahorro de un WriteableBitmap una vez que se cuece:
ACTUALIZACIÓN: Después de hacer algunas más búsqueda que parece guardar un WriteableBitmap a un archivo está limitada en SL3 debido a cuestiones de seguridad. Hay una solución:
Parece que tienes para guardar el contenido de un lienzo en un archivo. Usted debe ser capaz de modificar la muestra para salvar JPEG o de otros formatos.
Otros consejos
He escrito anteriormente este post que pasa por cómo ahorrar XAML a un mapa de bits utilizando un mapa de bits se puede escribir, el cuadro de diálogo y FJCore Guardar.
http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/