2012-03-15 6 views
0

Я пытаюсь преобразовать растровое изображение в base64 string.i можно преобразовать из строки в bitmap ... но похоже, что есть проблема при преобразовании из bitmap в string.I надеялся, что вы, ребята, могли бы дай мне рукуBitmap to Base64String

public static string BitmapToString(BitmapImage image) 
    { 

     Stream stream = image.StreamSource ; 
     Byte[] buffer = null; 
     if (stream != null && stream.Length > 0) 
     { 
      using (BinaryReader br = new BinaryReader(stream)) 
      { 
       buffer = br.ReadBytes((Int32)stream.Length); 
      } 
     } 

     return Convert.ToBase64String(buffer); 
    } 

он получает ArgumentNullException был необработанное Значение не может быть пустым. Имя параметра: inArray при возврате Convert.ToBase64String (buffer)

Помощь?

+0

Вы уверены, что указали 'if'? Я думаю, проблема в том, что изображение загружено из URL-адреса, и поэтому нет никакого потока. – xanatos

+0

не вводит if..the вещь, это говорит, что image.StreamSource имеет значение null..but оно получает правильное изображение –

+0

Попробуйте это: http://stackoverflow.com/questions/553611/wpf-image-to- байт (принятое решение) – xanatos

ответ

1

Прежде всего, необходимо, чтобы сохранить BitmapImage данных в память с помощью некоторых растрового кодера (PngBitmapEncoder, например).

public static byte[] EncodeImage(BitmapImage bitmapImage) 
{ 
    using (MemoryStream memoryStream = new MemoryStream()) 
    { 
     BitmapEncoder encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(bitmapImage)); 
     encoder.Save(memoryStream); 
     return memoryStream.ToArray(); 
    } 
} 

Затем просто закодируйте двоичные данные с помощью кодировки Base64.

const string filePath = @"..."; 
const string outFilePath = @"..."; 
const string outBase64FilePath = @"..."; 

// Constuct test BitmapImage instance. 
BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.StreamSource = File.OpenRead(filePath); 
bitmapImage.CacheOption = BitmapCacheOption.OnLoad; 
bitmapImage.EndInit(); 

// Convert BitmapImage to byte array. 
byte[] imageData = EncodeImage(bitmapImage); 
File.WriteAllBytes(outFilePath, imageData); 

// Encode with Base64. 
string base64String = Convert.ToBase64String(imageData); 

// Write to file (for example). 
File.WriteAllText(outBase64FilePath, base64String);