AS3 - 如何在没有Pixel Bender的情况下对bitmapdata进行像素化处理?

时间:2013-02-12 15:07:07

标签: actionscript-3 flash

我想将像素滤镜应用于位图。有没有办法在不使用像素弯曲器的情况下完成它?

2 个答案:

答案 0 :(得分:1)

您应该可以使用BitmapData类及其getPixel()/setPixel方法实现此目的。至于你的效果,你可以计算给定像素组的平均颜色,并对所有像素应用相同的颜色。

有关像素操作的更多信息:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d64.html

答案 1 :(得分:1)

一种非常简单的方法是重绘两次位图。此代码假定选择了blockSize,以便您的中间BitmapData(较小)与像素网格对齐。例如,如果您的源是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;
}