WP7

2011-09-11 17 views
11

पर पीएनजी के रूप में बिटमैप को सहेजना मैं एक अलग फ़ाइल को एक पीएनजी फ़ाइल के रूप में अपने अलग भंडारण में सहेजने की कोशिश कर रहा हूं। मुझे कोडप्लेक्स पर एक लाइब्रेरी मिली जिसे इमेजटूल कहा जाता है, जिसे लोग सिफारिश कर रहे हैं लेकिन जब मैं इसे आज़माता हूं और फ़ाइल खोलने का प्रयास करता हूं तो यह कहता है कि यह भ्रष्ट है। किसी को पता है कि मैं क्या गलत कर रहा हूँ?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

क्यों आप इसे पहले स्थान पर धीमे प्रारूप में परिवर्तित करना चाहते हैं? अगर छवि जेपीईजी है, तो आप इसे पीएनजी में परिवर्तित करके कुछ हासिल नहीं करते हैं। और पीएनजी देखना जेपीईजी से धीमा है। –

+2

प्रारूप मुझे पीएनजी –

+0

में होना चाहिए शायद उसे पारदर्शिता या हानि रहित संपीड़न की आवश्यकता हो? –

उत्तर

17

आप जेपीईजी मेमोरी स्ट्रीम को पीएनजी में परिवर्तित करने का प्रयास कर रहे हैं। इससे भ्रष्ट हो जाएगा - आपको बिटमैप को सीधे पीएनजी में सहेजना चाहिए।

मैं imagetools library के साथ इस विशेष कार्य प्रयास नहीं किया है, लेकिन अगर आप see John Papa's blog, यह है कि आप अपने WriteableBitmap जो ImageTools के हिस्से के रूप प्रदान की जाती है पर ToImage विस्तार विधि कॉल करने की जरूरत है लग रहा है। फिर आप इस छवि को लेने और अपनी खुली धारा में लिखने के लिए एन्कोडर का उपयोग कर सकते हैं।

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

मुझे लगता है, मुझे यकीन नहीं है कि मैं स्ट्रीम को किसी अन्य तरीके से बिटमैप कैसे प्राप्त कर सकता हूं। क्या आप विस्तारित छवि का स्रोत IsolatedFileStream पर सेट कर सकते हैं? –

+0

आह - एक त्वरित खोज कर रहा है, ऐसा लगता है कि यह बहुत अच्छी तरह से प्रलेखित नहीं है - मैंने जवाब अपडेट किया है। –

+0

@PaulAnnetts मैं इसे वापस कैसे पढ़ूं? मैं WP8 का उपयोग कर रहा हूँ। – alfah