WPF と Windows ストア アプリで画像の色を編集するには、画像のピクセルを読み取って編集し、新しい BitmapSource または WriteableBitmap に書き込むことができることを知っています。この手法が常に最善であるとは思えません。画像の色を編集するには、他にどのようなオプションが必要ですか?たとえば、明るさやガンマを変更するにはどうすればよいでしょうか?
1 に答える
基礎となるビットマップ バッファにアクセスして、ピクセルを効率的に操作できます。WriteableBitmap
WPF では、次のクラスを使用できます。
更新をより細かく制御し、バック バッファーへのマルチスレッド アクセスを行うには、次のワークフローを使用します。
Lock メソッドを呼び出して、更新用にバック バッファーを予約します。
BackBuffer プロパティにアクセスして、バック バッファーへのポインターを取得します。
変更をバック バッファーに書き込みます。WriteableBitmap がロックされている場合、他のスレッドがバック バッファーに変更を書き込む可能性があります。
AddDirtyRect メソッドを呼び出して、変更された領域を示します。
Unlock メソッドを呼び出して、バック バッファーを解放し、画面への表示を許可します。
更新がレンダリング スレッドに送信されると、レンダリング スレッドは、変更された四角形をバック バッファーからフロント バッファーにコピーします。レンダリング システムは、この交換を制御して、デッドロックを回避し、「テアリング」などのアーティファクトを再描画します。
WriteableBitmap
Windows ストア アプリでは、次のクラスを使用できます。
PixelBufferに直接書き込むことはできませんが、言語固有の手法を使用してバッファーにアクセスし、その内容を変更できます。
C# または Microsoft Visual Basic からピクセル コンテンツにアクセスするには、AsStream拡張メソッドを使用して、基になるバッファーにストリームとしてアクセスできます。
C++ からピクセル コンテンツにアクセスするには、IBufferByteAccessタイプ (Robuffer.h で定義) を照会し、そのBufferプロパティに直接アクセスします。