AS3:如何将彩色位图的BitmapData更改为黑白?

Yen*_*ens 5 flash actionscript-3 bitmapdata

如何在AS3中将彩色位图的位图数据更改为黑白?我正在为闪存中的CMS开发一个简单的图像编辑器工具.

人们应该能够将上传的位图的颜色切换为黑白.我希望bitmapdata本身改变所以我可以用Adobe的JPGEncoder类将其写入ByteArray.

bac*_*dos 27

这将是我认为最优雅的解决方案(与source你同在BitmapData):

const rc:Number = 1/3, gc:Number = 1/3, bc:Number = 1/3;
source.applyFilter(source.bitmapData, source.bitmapData.rect, new Point(), new ColorMatrixFilter([rc, gc, bc, 0, 0,rc, gc, bc, 0, 0, rc, gc, bc, 0, 0, 0, 0, 0, 1, 0]));
Run Code Online (Sandbox Code Playgroud)

flash.geom::Pointflash.filters::ColorMaxtrixFilter...

ColorMatrixFilter允许许多事情,如色调变换,色彩,闪电,变暗和去饱和等......否则BitmapData::paletteMap,BitmapData::colorTransform是很好的补充......

只是想注意,使用以下内容

const rc:Number = 1/3, gc:Number = 1/2, bc:Number = 1/6; 
Run Code Online (Sandbox Code Playgroud)

看起来更自然,因为主观上#00FF00#FF0000它更亮,而后者更亮#0000FF

那么祝你好运吧 ... ;)

格尔茨

back2dos

  • 我似乎记得R,G和B的典型颜色加权分别为30%,59%和11%.虽然,当你写的加权有点主观时,它确实与颜色的亮度值有关.在这方面你的重量略有偏差,但这种方法绝对正确. (3认同)