2

WPF WriteableBitmap オブジェクトを System.Drawing.Image に変換するにはどうすればよいですか?

私の WPF クライアント アプリはビットマップ データを Web サービスに送信し、Web サービスはその側で System.Drawing.Image を構築する必要があります。

WriteableBitmap のデータを取得し、その情報を Web サービスに送信できることはわかっています。

// WPF side:

WriteableBitmap bitmap = ...;
int width = bitmap.PixelWidth;
int height = bitmap.PixelHeight;
int[] pixels = bitmap.Pixels;

myWebService.CreateBitmap(width, height, pixels);

しかし、Web サービス側では、このデータから System.Drawing.Image を作成する方法がわかりません。

// Web service side:

public void CreateBitmap(int[] wpfBitmapPixels, int width, int height)
{
   System.Drawing.Bitmap bitmap = ? // How can I create this?
}
4

3 に答える 3

3

System.Drawing.Bitmapビットマップデータが圧縮されていない場合は、おそらく次のコンストラクターを使用できます: Bitmap(Int32、Int32、Int32、PixelFormat、IntPtr)

ビットマップがjpgまたはpngとしてエンコードされている場合は、MemoryStreamビットマップデータからを作成し、それをBitmap(Stream)コンストラクターで使用します。

編集:

ビットマップをWebサービスに送信しているので、最初にエンコードすることをお勧めします。System.Windows.Media.Imaging名前空間にはいくつかのエンコーダーがあります。例えば:

    WriteableBitmap bitmap = ...;
    var stream = new MemoryStream();               
    var encoder = new JpegBitmapEncoder(); 
    encoder.Frames.Add( BitmapFrame.Create( bitmap ) ); 
    encoder.Save( stream ); 
    byte[] buffer = stream.GetBuffer(); 
    // Send the buffer to the web service   

受信側では、単純に次のようになります。

    var bitmap = new System.Drawing.Bitmap( new MemoryStream( buffer ) );

お役に立てば幸いです。

于 2010-07-14T08:53:07.563 に答える
3

このブログ投稿は、WriteableBitmap を jpeg 画像としてエンコードする方法を示しています。おそらくそれが役立ちますか?

生の画像データ(ピクセル)を本当に転送したい場合は、次のことができます。

  1. 正しいサイズのSystem.Drawing.Bitmapを作成します
  2. 生データを反復処理し、生データを System.Drawing.Color に変換し (例: Color.FromArgb()を介して)、 SetPixel()を介して新しく作成された画像の各ピクセルの色を設定します。

私は間違いなく最初の解決策 (ブログ投稿で説明されているもの) を好みます。

于 2010-07-13T17:41:12.200 に答える
0

質問は WPF に関するものPixelsで、のプロパティではないようですWriteableBitmap。ここでの回答の一部は SilverLight の記事を指しているため、これは WPF と SilverLight の違いであると思われます。

于 2013-02-12T21:47:33.083 に答える