2013-07-29 2 views
3

Я пытаюсь преобразовать растровое изображение в Байт-массив. Я выбрал все изображение, используя класс MediaLibrary и добавил его в список растровых изображений. Вот мой кодПреобразование bitmapimage в массив байтов

using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (!store.DirectoryExists("ImagesZipFolder")) 
      { 
       store.CreateDirectory("ImagesZipFolder"); 
       for (int i = 0; i < imgname.Count(); i++) 
       { 
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder\" + imgname[i], System.IO.FileMode.CreateNew, store)) 
        { 
          byte[] bytes = null; 
          using (MemoryStream ms = new MemoryStream()) 
          { 
           WriteableBitmap wBitmap = new WriteableBitmap(ImgCollection[i]); 
           wBitmap.SaveJpeg(ms, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); 
           stream.Seek(0, SeekOrigin.Begin); 
           bytes = ms.GetBuffer(); 
           stream.Write(bytes, 0, bytes.Length); 
          } 
        // byte[] bytes = Encoding.UTF8.GetBytes(imgname[i]);//new byte[ImgCollection[i].PixelWidth * ImgCollection[i].PixelHeight * 4];       
        // stream.Write(bytes, 0, bytes.Length); 
        } 
       } 
      } 
      else { 
       directory = true; 
      } 
      } 

В основном то, что я пытаюсь сделать это, выбрав все изображения или фотографии с устройства и создать почтовый файл, что изображения. Мне удалось создать zip-файл изображений. Когда я извлекаю этот файл, есть некоторые изображения, но проблема в том, что когда я дважды нажимаю на изображение, я не вижу этого изображения. Я думаю, что проблема заключается в чтении байтов изображения. Я не понимаю, что случилось? Правильно ли мой код?

+0

Можете ли вы попробовать с 'ms.ToArray()' вместо 'ms.GetBuffer()'? –

+0

@KooKiz Спасибо за ответ. Я пробовал это, но он не работает –

+0

В качестве побочного примечания вам не нужно использовать массив байтов. После поиска прямо вызовите 'ms.CopyTo (stream);'. Это не решит вашу проблему, но это упростит чтение и сохранение кода. И поиск должен быть вызван ms, а не потоком. –

ответ

3

Возможно, вы можете попробовать следующее. Я знаю, что этот код поддерживает изображение, поэтому, если вам не повезло с этим, у вас может быть другая проблема.

ImageConverter относится к пространству имен System.Drawing.


Update:

http://msdn.microsoft.com/en-GB/library/system.windows.media.imagesourceconverter.convertto.aspx

Вы должны быть в состоянии использовать это вместо типа System.Drawing я предложил.

+0

Спасибо за ответ. Я думаю, System.Drawing в не поддерживается в Windows Phone –

+0

А мои извинения. Ответы здесь на использование? http://stackoverflow.com/questions/4732807/conversion-of-bitmapimage-to-byte-array?rq=1 – stevepkr84

+0

Также проверьте мое редактирование, надеюсь, это сработает для вас. – stevepkr84

0

Нет необходимости записывать WriteableBitmap в MemoryStream, а затем копировать его в IsolStorageFileStream. Просто сохраните растровое изображение непосредственно в IsolStorageFileStream.

using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder\" + imgname[i], System.IO.FileMode.CreateNew, store)) 
{ 
    WriteableBitmap wBitmap = new WriteableBitmap(ImgCollection[i]); 
    wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); 
} 

Это позволит вам сэкономить и на памяти. Если вы действительно хотите сохранить память, вы можете повторно использовать WriteableBitmap.

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