3

DBに保存するためにBitmapImageをbyte []に​​保存しています。データが正確に保存および取得されていると確信しているので、問題はありません。

byte[] から BitmapImage への変換で、「System.NotSupportedException: この操作を完了するのに適したイメージング コンポーネントが見つかりませんでした」という例外が発生し続けます。

ここで私の2つの機能で何が間違っているのか誰にもわかりますか?

  private Byte[] convertBitmapImageToBytestream(BitmapImage bi)
  {
     int height = bi.PixelHeight;
     int width = bi.PixelWidth;
     int stride = width * ((bi.Format.BitsPerPixel + 7) / 8);

     Byte[] bits = new Byte[height * stride];
     bi.CopyPixels(bits, stride, 0);

     return bits;
  }

  public BitmapImage convertByteToBitmapImage(Byte[] bytes)
  {
     MemoryStream stream = new MemoryStream(bytes);
     stream.Position = 0;
     BitmapImage bi = new BitmapImage();
     bi.BeginInit();
     bi.StreamSource = stream;
     bi.EndInit();
     return bi;
  }
4

3 に答える 3

0

作成しているbyte[]形式が、BIがストリームで期待しているものであることをどのように知っていますか?BitmapImage.StreamSourceを使用して、保存するbyte []を作成してみませんか?そうすれば、フォーマットに互換性があることがわかります。

http://www.codeproject.com/KB/vb/BmpImage2ByteArray.aspx

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8327dd31-2db1-4daa-a81c-aff60b63fee6/

[私はこのコードを試しませんでしたが、できます]

于 2010-10-08T18:44:51.177 に答える
0

bitmapimage CopyPixels が正しくないことがわかりました。bitmapimage の出力を取得し、この場合は jpg で使用できるものに変換します。

public static Byte[] convertBitmapImageToBytestream(BitmapImage bi)
  {
     MemoryStream memStream = new MemoryStream();
     JpegBitmapEncoder encoder = new JpegBitmapEncoder();
     encoder.Frames.Add(BitmapFrame.Create(bi));
     encoder.Save(memStream);
     byte[] bytestream = memStream.GetBuffer();
     return bytestream;
  }
于 2010-10-08T23:31:53.707 に答える
0

この StackOverflow の質問は役に立ちますか?

byte[] から Silverlight の BitmapImage

編集:

これを試してみてください。うまくいくかどうかはわかりません:

public BitmapImage convertByteToBitmapImage(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    stream.Position = 0;
    BitmapImage bi = new BitmapImage();
    bi.BeginInit();
    bi.CacheOption = BitmapCacheOption.OnLoad;
    bi.DecodePixelWidth = ??; // Width of the image
    bi.StreamSource = stream;
    bi.EndInit();
    return bi;
}

更新 2:

私はこれらを見つけました:

実行時に byte[] をイメージにロードする

非 UIThread の byte[] からの BitmapImage

それ以外はわかりません。

于 2010-10-08T00:38:33.050 に答える