2012-03-15 14 views
0

ビットマップをbase64 string.iに変換しようとしています.iは文字列からビットマップに変換できますが、ビットマップから文字列に変換するときに問題があるようです。私はあなたにできることを望んでいましたビットマップから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が未処理の 値はnullにすることはできませんでした取得します。 パラメータ名:inArray Convert.ToBase64String(バッファ)を返すとき

ヘルプ?

+0

「if」を入力してもよろしいですか?問題は、画像がURLからロードされているため、ストリームがないことだと思います。 – xanatos

+0

if..theはimage.StreamSourceがnullだと言っていますが、正しい画像を取得しません。 –

+0

これを試してみてください:http://stackoverflow.com/questions/553611/wpf-image-to-バイト(受け入れられたソリューション) – xanatos

答えて

1

まず、いくつかのビットマップエンコーダ(例えばPngBitmapEncoder)を使用してメモリにBitmapImageデータを保存する必要があります。

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); 
関連する問題