2011-09-11 25 views
11

Estoy tratando de guardar un mapa de bits en mi almacenamiento aislado como un archivo png. Encontré una biblioteca en Codeplex llamada ImageTools que las personas me han estado recomendando, pero cuando intento y intento abrir el archivo, dice que está dañado. ¿Alguien sabe lo que estoy haciendo mal?Guardar bitmap como PNG en WP7

private static void SaveImageToIsolatedStorageAsPng(BitmapImage bitmap, string fileName) 
{ 
    //convert to memory stream 
    MemoryStream memoryStream = new MemoryStream(); 
    WriteableBitmap writableBitmap = new WriteableBitmap(bitmap); 
    writableBitmap.SaveJpeg(memoryStream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); 

    //encode memory stream as PNG 
    ExtendedImage image = new ExtendedImage(); 
    image.SetSource(memoryStream); 

    PngEncoder encoder = new PngEncoder(); 

    //Save to IsolatedStorage 
    using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
    using (var writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create, store)) 
    { 
     encoder.Encode(image, writeStream); 
    } 
} 
+0

¿Por qué en primer lugar quiere convertir a un formato más lento? si la imagen es JPEG, no gana nada convirtiéndola a PNG. Y ver PNG es más lento que JPEG. –

+2

El formato que necesito para estar en PNG –

+0

tal vez necesita transparencia o compresión sin pérdida? –

Respuesta

17

Está tratando de convertir la secuencia de la memoria JPEG en PNG. Eso lo corromperá, debes guardar el mapa de bits directamente en PNG.

No he probado esta tarea en particular con el imagetools library, pero si see John Papa's blog, parece que es necesario llamar al método ToImage extensión en su WriteableBitmap que se proporciona como parte de ImageTools. Luego puede usar el codificador para tomar esta imagen y escribirla en su transmisión abierta.

var img = bitmap.ToImage(); 
var encoder = new PngEncoder(); 
using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, store)) 
{ 
    encoder.Encode(img, stream); 
    stream.Close(); 
} 
+2

Veo, no estoy seguro de cómo puedo obtener bitmap para una transmisión de otra manera. ¿podría configurar la fuente de la imagen extendida en IsolatedFileStream? –

+0

Ah - haciendo una búsqueda rápida, parece que no está muy bien documentado - He actualizado la respuesta. –

+0

@PaulAnnetts ¿Cómo leo esto? Estoy usando WP8. – alfah

Cuestiones relacionadas