2011-09-11 38 views
11

Tôi đang cố lưu bitmap vào bộ nhớ riêng biệt dưới dạng tệp png. Tôi tìm thấy một thư viện trên Codeplex được gọi là ImageTools mà mọi người đã đề xuất nhưng khi tôi thử nó và cố gắng để mở tập tin nó nói rằng nó bị hỏng. Có biết tôi đang làm gì sai không?Lưu Bitmap dưới dạng PNG trên 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

Tại sao bạn muốn chuyển đổi sang định dạng chậm hơn ở địa điểm đầu tiên? nếu hình ảnh là JPEG, bạn không đạt được gì bằng cách chuyển đổi nó thành PNG. Và xem PNG chậm hơn JPEG. –

+2

Định dạng tôi cần phải ở định dạng PNG –

+0

có thể anh ta cần độ trong suốt hoặc nén không mất dữ liệu? –

Trả lời

17

Bạn đang cố gắng chuyển đổi luồng bộ nhớ JPEG thành PNG. Điều đó sẽ làm cho nó bị hỏng - bạn nên lưu Bitmap trực tiếp vào PNG.

Tôi chưa thử nhiệm vụ đặc biệt này với imagetools library, nhưng nếu bạn see John Papa's blog, có vẻ như bạn cần phải gọi phương thức ToImage mở rộng trên WriteableBitmap của bạn được cung cấp như một phần của ImageTools. Sau đó, bạn có thể sử dụng bộ mã hóa để chụp ảnh này và ghi ra luồng mở của mình.

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

Tôi thấy, tôi không chắc chắn làm thế nào tôi có thể nhận bitmap vào một dòng bất kỳ cách nào khác. u có thể thiết lập nguồn của ExtendedImage cho IsolatedFileStream không? –

+0

Ah - thực hiện tìm kiếm nhanh, có vẻ như đó không phải là tài liệu rất tốt - tôi đã cập nhật câu trả lời. –

+0

@PaulAnnetts Làm thế nào để tôi đọc lại? Tôi đang sử dụng WP8. – alfah

Các vấn đề liên quan