7

Direct2D を使用してピクセルを操作する効率的な方法の例を誰かが提供できますか?

たとえば、レンダー ターゲットですべての緑のピクセル ( RGB = 0x00FF00) を赤のピクセル ( ) と交換するにはどうすればよいでしょうか? RGB = 0xFF0000標準的なアプローチは何ですか?そのために使用することは可能ID2D1HwndRenderTargetですか?ここでは、ある種のハードウェア アクセラレーションの使用を想定しています。ピクセルを直接操作するには、別のオブジェクトを作成する必要がありますか?

DirectDraw を使用して、論理演算でBltFastメソッドを使用します。IDirectDrawSurface7Direct2D に似たものはありますか?

もう 1 つのタスクは、各点の位置と色が数学関数の結果である複雑な画像を動的に生成することです。例として、すべてを単純化して描画してみましょうY = X ^ 2。Direct2D でそれを行う方法は? 最終的には複雑な関数を描く必要がありますが、誰かが簡単な例を教えてくれたらY = X ^ 2.

4

3 に答える 3

12

まず、ID2D1Bitmap を "デバイス ビットマップ" と考えると役に立ちます。ローカルの CPU アドレス指定可能なメモリに存在する場合と存在しない場合があり、バスの CPU 側からピクセルを読み書きするための便利な (または少なくとも高速な) 方法はありません。したがって、その角度からアプローチするのはおそらく間違ったアプローチです。

IWICImagingFactory::CreateBitmap() で作成できる通常の WIC ビットマップ、IWICBitmap が必要だと思います。そこから Lock() を呼び出してバッファを取得し、ポインタを使用して読み取り/書き込みを行い、必要なことを行うことができます。次に、Direct2D を使用して画面上に描画する必要がある場合は、ID2D1RenderTarget::CreateBitmap() を使用して新しいデバイス ビットマップを作成するか、ID2D1Bitmap::CopyFromMemory() を使用して既存のデバイス ビットマップを更新します。ID2D1Factory::CreateWicBitmapRenderTarget() (ハードウェア アクセラレーションではありません) を使用して、IWICBitmap にレンダリングすることもできます。

これらのタイプの操作では、ハードウェア アクセラレーションは得られません。Win8 で更新された Direct2D (最終的には Win7 でも利用できるようになるはずです) には、このための気の利いたものがありますが、見た目はかなり複雑です。

于 2012-02-21T21:47:41.263 に答える
0

ID2D1Effectすべての緑のピクセルを赤のピクセルと交換するという特定の問題は、Windows 8 および Windows 7 のプラットフォーム アップデートで対処できます。

より具体的には、カラーマトリックス効果です。

于 2013-08-28T14:59:03.813 に答える