0

ビットマップにピクセレート フィルタを適用したいと思います。ピクセルベンダーを使わずにそれを行う方法はありますか?

4

2 に答える 2

1

BitmapDataクラスとそのgetPixel()/setPixelメソッドでこれを達成できるはずです。具体的には、特定のピクセル グループの平均色を計算し、それらすべてに同じ色を適用できます。

ピクセル操作の詳細: http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d64.html

于 2013-02-12T15:11:17.793 に答える
1

これを行う非常に簡単な方法は、ビットマップを 2 回再描画することです。このコードは、中間の BitmapData (小さい方) がピクセル グリッドに整列するように blockSize が選択されていることを前提としています。たとえば、ソースが 100x100 ピクセルの場合、blockSize を 2 にすると、中間の BitmapData が 50x50 ピクセルになります。より複雑なものは、おそらく Math.round() といくつかのファッジが必要です。

//  Assumes that source.width / blockSize has no remainder
//  Same with source.height / blockSize
public function getMosaic( source:BitmapData, blockSize:int ):BitmapData
{
    var bitmap:Bitmap = new Bitmap( source );
    bitmap.smoothing = true;  // blends pixels values

    var smaller:BitmapData = new BitmapData( source.width  / blockSize,
                                             source.height / blockSize );
    var matrix:Matrix = new Matrix();
    matrix.scale( 1 / blockSize, 1 / blockSize );
    smaller.draw( bitmap, matrix );

    bitmap = new Bitmap( smaller );
    //  Avoid "bitmap.smoothing = true" here to keep it blocky

    var blocky:BitmapData = new BitmapData( source.width, source.height );
    matrix.invert();  //  gives the opposite effect from before
    blocky.draw( bitmap, matrix );

    smaller.dispose();  //  always dispose BitmapData no longer needed

    return blocky;
}
于 2013-02-14T21:37:43.520 に答える