3

それらを実装する方法は知っていますが、ピクセルごとに変換を適用するか、単一の呼び出しなどを使用して画像全体に影響を与える別の方法があるかどうかはわかりませんか?

AFAIK Get.Set Pixel は非常に遅いです。彼らがこのようにしたかどうかはわかりません。

単純なケースとしてグレースケール/彩度低下フィルタの場合、どのように記述しますか?

4

2 に答える 2

5

画像をロックしてから、SetPixel メソッドを直接バイパスしてメモリを操作する必要があります。 こちら を参照しください

たとえば、次のように青チャンネルを 255 に設定できます。

   BitmapData bmd=bm.LockBits(new Rectangle(0, 0, 10, 10), System.Drawing.Imaging.ImageLockMode.ReadOnly, bm.PixelFormat);
      int PixelSize=4;
      for(int y=0; y<bmd.Height; y++)
      {
        byte* row=(byte *)bmd.Scan0+(y*bmd.Stride);
        for(int x=0; x<bmd.Width; x++)
        {
          row[x*PixelSize]=255;
        }
      } // it is copied from the last provided link.
于 2009-08-18T22:48:38.710 に答える
1

さらに高速なパフォーマンスを実現するために、画像だけでなく、すべての .NET WPF ビジュアル オブジェクトで動作する WPF のピクセル シェーダー効果の実装を確認することをお勧めします。

このような効果の基本的な実装手順を説明している記事をご覧ください。

http://bursjootech.blogspot.com/2008/06/grayscale-effect-pixel-shader-effect-in.html

于 2011-02-02T20:44:45.390 に答える