我想将像素化过滤器应用于位图。有没有办法在不使用像素弯曲器的情况下做到这一点?
问问题
873 次
2 回答
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;
}
于 2013-02-14T21:37:43.520 回答
1
您应该能够使用BitmapData
类及其getPixel()/setPixel
方法来实现这一点。具体到您的效果,您可以计算给定像素组的平均颜色,并将相同的颜色应用于所有像素。
有关像素操作的更多信息:http: //help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d64.html
于 2013-02-12T15:11:17.793 回答