2011-09-11 15 views
11

Yalıtılmış depolamam için bir bitmap dosyasını png dosyası olarak kaydetmeye çalışıyorum. Codeplex'te insanların tavsiye ettiği ImageTools adında bir kütüphane buldum, ancak bunu denediğimde ve dosyayı açmaya çalıştığımda bozuk olduğunu söylüyor. Herhangi bir yanlış ne yapıyorum biliyor musun?Bitmap'i WP7 üzerinde PNG olarak kaydetme

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

Neden ilk etapta daha yavaş bir biçime dönüştürmek istiyorsunuz? Resim JPEG ise, PNG'ye dönüştürerek hiçbir şey kazanamazsınız. Ve PNG'yi görüntülemek JPEG'den daha yavaştır. –

+2

PNG –

+0

'da olması gereken formatın şeffaflık veya kayıpsız sıkıştırmaya ihtiyacı var mı? –

cevap

17

JPEG bellek akışını PNG'ye dönüştürmeyi deniyorsunuz. Bu onu bozacak - Bitmap'i doğrudan PNG'ye kaydetmelisiniz.

Ben imagetools library ile bu özel görevi denemedim ama ImageTools bir parçası olarak sağlanır sizin WriteableBitmap üzerinde ToImage uzatma yöntemini çağırmak gerekir gibi see John Papa's blog eğer görünüyor. Ardından bu resmi çekmek ve açık akışınıza yazmak için kodlayıcıyı kullanabilirsiniz.

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

Görüyorum, başka bir şekilde bir akışa nasıl bitmap alabildiğimi bilmiyorum. ExtendedImage kaynağını IsolatedFileStream'e ayarlayabilir misiniz? –

+0

Ah - hızlı arama yapıyor, çok iyi belgelenmiş değil gibi görünüyor - cevabı güncelledim. –

+0

@PaulAnnetts Bunu nasıl okuyacağım? WP8 kullanıyorum. – alfah

İlgili konular