2017-02-18 10 views
-1

私はC#とWPFの新機能ですが、これを完全に間違って見ることができます。私はJPEGバイト配列をソースとして持っています。私はこれを変更することはできません。私は配列を取得し、いくつかの計算を実行し、JPEGの領域に長方形を描画する必要があります。私はそれをImage XAMLコントロールに書き込みます。WPF:ImageSourceインスタンスにプログラムで矩形を描きます

私はJPEGを取得し、それをImageSourceに変換してImageControlに表示することができます。私はImageSourceから描画コンテキストを取得する方法を見つけることができません。私はImageSourceConverterを使用してJPEG配列を読み込み、このクラスはImageSourceインスタンス、duh!を返します。

ImageSource mImage = (ImageSource)mConverter.ConvertFrom(mImageBuffer); 

ImageSourceには描画コンテキストプロパティがありません。

私が必要と思われるものはです。それはImageSourceから派生し、描画コンテキストプロパティを持っています。

ImageSourceの代わりにを使用するにはどうすればよいですか。

ImageDrawingクラスを見ると、ImageSourceというプロパティがあります。このクラスには描画コンテキストはありません。

私は現在、Visualクラスを探していて、どこを見ていただければ幸いですか?

編集: ありがとうございます。正しい方向に私を指してくれてありがとうございます。私は次のように終わった:

ImageSource mImage = (ImageSource)mConverter.ConvertFrom(mImageBuffer); 

BitmapSource bImage = mImage as BitmapSource; 

// Draw a Rectangle 
DrawingVisual dVisual = new DrawingVisual(); 
using (DrawingContext dc = dVisual.RenderOpen()) 
{ 
    dc.DrawImage(bImage, new Rect(0, 0, bImage.PixelWidth, bImage.PixelHeight)); 
    dc.DrawRectangle(Brushes.Green, null, new Rect(20, 20, 150, 100)); 
} 
RenderTargetBitmap targetBitmap = new RenderTargetBitmap(640,480,96,96, PixelFormats.Default); 
targetBitmap.Render(dVisual); 

WriteableBitmap wBitmap = new WriteableBitmap(targetBitmap); 
image.Source = wBitmap; 
+0

あなたはImageSourceを読み込んでいますが、あなたはWinFormsビットマップの読み込みを強くお勧めしました。とにかく、[WriteableBitmapEx](https://writeablebitmapex.codeplex.com/)を見てみたいかもしれません。 – Clemens

+0

私はWinFormsビットマップが欲しいと覚えていません。私はWinFormsを使ったことがありませんか? – Sting

+0

2日前の前回の質問では、System.Drawing名前空間のクラスを使用しないように伝えようとしていましたが、成功していないWinFormsだからです。あなたが間違って受け入れた答えを編集しなければならなかった。 – Clemens

答えて

1

あなたは、私は彼らがどのように効率的かわからないビジュアルを使用して見てきましたが、あなたがImageSourceはにソースをコピーし、それに直接描画することができませんようです。

DrawingVisualを作成し、ImageSourceとRectangleを描画ビジュアルの描画コンテキストに描画します。

次に、WriteableBitmapを使用してイメージに表示してください。