2016-03-27 22 views
1

Resim dosyasını okumak istiyorum (png, jpg, vb.). ve xml dosyasını kaydedin, görüntüyü xml'den yükleyin. İlk önceGörüntü dosyası WPF'de dize nasıl kaydedilir?

. System.InvalidOperationException öğesini atlayın. saniye. Aşağıdaki metodun doğru olmadığını bilmiyorum.Senaryo.

1. Hdd'den görüntü dosyasını açın.
2. Uygulamamdaki belgeyi (aşağıdaki kaynakta 'SomeClass' gibi bir görüntü içeren metin) kaydedin.
3. Belgeyi kaydettiğinizde, uygulama Image ile SomeClass serileştirir.
4. Uygulamayı yeniden çalıştırın ve xml dosyasını yükleyin.
5. Daha sonra, uygulamada görüntüyü göster.

using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(@"C:\z.jpg"))) 
{ 
    StreamReader sr = new StreamReader(ms); 
    someClass.ImageData = sr.ReadToEnd(); 
    Xml.Serialize<SomeClass>(someClass, @"C:\z.xml"); 
} 

SomeClass someClass = Xml.Deserialize<SomeClass>(@"C:\z.xml"); 

BitmapImage image = new BitmapImage(); 
image.BegineInit(); 
image.Source = ?? 
image.EndInit(); 

System.Windows.Controls.Image imageControl = new Image(); 
imageControl.Source = image; 

this.Content = imageControl; 

bu
serialize, Deserialize statik bir yöntemdir.

public static class Xml 
{ 
    public static void Serialize<T>(T data, string path) 
    { 
     XmlSerializer s = new XmlSerializer(typeof(T)); 

     using (FileStream fs = new FileStream(path, FileMode.Create)) 
     { 
      s.Serialize(fs, data); 
     } 
    } 

    public static T Deserialize<T>(string path) 
    { 
     XmlSerializer s = new XmlSerializer(typeof(T)); 
     using (FileStream fs = new FileStream(path, FileMode.Open)) 
     { 
      fs.Position = 0; 
      return (T)s.Deserialize(fs); 
     } 
    } 
} 

Bu

[Serializable] 
public class SomeClass 
{ 
    public string ImageData { get; set; } 
    public string TextData { get; set; } 
} 

teşekkür ederim SomeClass

olduğunu.

+0

MSDN belgelerinde bölüm ** Hata ayıklama Serile Kodu ** Bkz [* XmlSerializer * ile genel sorunları giderme] (https://msdn.microsoft.com/en-us/library/aa302290.aspx – slugster

cevap

3

İkili görüntü verilerini bir dizeye dönüştürmeniz gerekir. Bunu işlemek için Dönüştürme yöntemlerini kullanabilirsiniz.

Düzeltme notu - Tüm baytları bir bellek akışına okudunuz ve daha sonra bir akış okuyucudan tekrar okuyorsunuz. Kodu doğrudan okumak ve bu baytları Base64'e dönüştürmek basitleştirecektir.

Aşağıdaki örnek.

someClass.ImageData = Convert.ToBase64String(File.ReadAllBytes(@"C:\z.jpg")); 
Xml.Serialize<SomeClass>(someClass, @"C:\z.xml"); 

------------------ 

SomeClass someClass = Xml.Deserialize<SomeClass>(@"C:\z.xml"); 

BitmapImage image = new BitmapImage(); 
image.BegineInit(); 
image.Source = Convert.FromBase64String(someClass.ImageData); 
image.EndInit(); 
+0

Teşekkürler. ama ben deseiralze, istisna attığımda .... – user3214694

+0

@slugster Ben belgenin birçok veri kaydetmek istiyorum bir dosya .... gibi pptx – user3214694

+0

Çünkü İngilizce bilmiyorum, anlamak zor. Kolay bir kelime haznesinde açıklayabilir misiniz? – user3214694

İlgili konular