2016-08-19 6 views
0

モバイルアプリから取り込んだ画像をBitmapImageに変換する必要があります。撮影したすべての画像はbyte[]に変換され、SQL Serverに格納されます。byte []をBitmapImageに変換できません

次に、そのイメージを取得し、WPFのImageコントロールに表示したいとします。

private static BitmapImage LoadImage(byte[] imageData) 
{ 
    if (imageData == null || imageData.Length == 0) return null; 
    var image = new BitmapImage(); 
    using (var mem = new MemoryStream(imageData)) 
    { 
     mem.Position = 0; 
     image.BeginInit(); 
     image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.UriSource = null; 
     image.StreamSource = mem; 
     image.EndInit(); //Error exception here. 
    } 
    image.Freeze(); 
    return image; 
} 

上記のように、私はEndInit()行でエラーが表示されます。ここでは、バイト[]からのBitmapImageに私の変換があります。

この操作を完了するのに適したイメージングコンポーネントは見つかりませんでした。

私はLoadImage()メソッドを呼び出すと、次のように:、

MyCollection.Add(new ImageItems 
{ 
    Id = image.Id, 
    ImageData = LoadImage(image.TruckImg), 
    DateTaken = image.DateTaken 
}); 

の事は私がメールにその正確に同じ画像を添付する場合ので、バイトが[]​​が有効なイメージが含まれていることを知っています画像はGmailに正しく表示されます。

電子メールの添付ファイルのコード:

MemoryStream memoryStream = new MemoryStream(image.TruckImg); 
mail.Attachments.Add(new Attachment(memoryStream, filename, MediaTypeNames.Image.Jpeg)); 

誰がどのように上記の私のエラーを修正する教えてもらえますか? BitmapImageが機能するための特定のヘッダーを設定する必要がありますか?もし私がそうすれば、私は郵送された画像を受け取ったときに正確に同じバイト[​​がGmailに正しく表示されます...

ありがとうございます! :)

+0

"この操作を完了するのに適したイメージングコンポーネントが見つかりませんでした"は、バイト配列が有効なエンコードされたイメージバッファ、つまりJPEG、PNGなどではないことを明確に示しています。 – Clemens

+0

ありがとうコメント。私は自分と同じバイト[]をメールに添付して送ることができないことを理解しておらず、ブラウザに.jpgイメージとして正しく表示されますか? – CareTaker22

+0

はい、上記の変換コードに追加されています: 'image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;' – CareTaker22

答えて

0

私は問題が電子メールで文字列としてbyte[]を送信していることを知りました。データベースから文字列全体をクリップボードにコピーして電子メールで送信すると、イメージが破損します。これは誰かが私と同じ簡単な間違いをするのに役立つことを願っています! :P

関連する問題