2015-03-30 5 views
0

Я пытаюсь сохранить изображение из пользовательского буфера обмена. Я могу получить все правильные данные из изображения буфера обмена в Bitmapsource. Я пытаюсь сохранить в Bitmapimage, чтобы я мог загрузить файл на веб-сайт. При преобразовании Bitmapsource в Bitmapimage все данные Bitmapimages остаются нулевыми и генерируют исключение.Не удается сохранить Bitmapsource для Bitmapimage

 private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.V)) 
     { 
      if (Clipboard.ContainsImage()) 
      { 
       BitmapSource bitmapSource = Clipboard.GetImage(); 

       JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
       MemoryStream memoryStream = new MemoryStream(); 
       BitmapImage bImg = new BitmapImage(); 

       encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); 
       encoder.Save(memoryStream); 

       bImg.BeginInit(); 
       bImg.StreamSource = new MemoryStream(memoryStream.ToArray()); 
       bImg.EndInit(); 

       var client = new WebClient(); 
       var uri = bImg.UriSource; 
       var path = uri.AbsolutePath; 
       //client.UploadFile(link, path); 
      } 
     } 
    } 

И

var uri = bImg.UriSource; 
var path = uri.AbsolutePath; 

будет сгенерировано необработанное исключение типа «System.NullReferenceException» произошло в WpfApplication1.exe

Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта

ответ

1

Создание BitmapImage из его StreamSource недвижимости не волшебным образом установит его UriSource. Вам не нужен этот BitmapImage.

Написать оригинальную BitmapSource к FileStream вместо MemoryStream, и загрузить этот файл:

string path = ... 

using (var fileStream = new FileStream(path, FileMode.Create)) 
{ 
    encoder.Save(fileStream); 
} 

client.UploadFile(link, path); 

Это может быть даже ненужным для создания промежуточного файла. Просто загрузите буфер MemoryStream:

using (var memoryStream = new MemoryStream()) 
{ 
    encoder.Save(memoryStream); 
    client.UploadData(link, memoryStream.ToArray()); 
} 
+0

Сохранение температуры в потоке фильтра было решением. Спасибо за помощь. – eek

+0

Другой должен работать и сохраняет временный файл. – Clemens

Смежные вопросы