(Flashが表示されない人はこちら→CameraDither.swf 要 Webカメラ)
去年、 ディザ法による画像の疑似階調表現というのを紹介しましたが(ディザ法 – AS3.0)、
これをカメラ画像に適用してみたところ、負荷は高いですがなんとか動きました。
前回はByteArrayを使ったので、今回はBitmapData版のディザ法(ベイヤーパターン)のコードを載せておきます。
ここでは約1677万色(RGB24ビット)から8色(RGB3ビット)にまで色数を減らしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
private function bayerDither(img:BitmapData):void { var r:int = 0, g:int = 0, b:int = 0, abr:int = 0; var data:uint = 0; var pattern:Vector.<int> = Vector.<int>([1,9,3,11, 13,5,15,7, 4,12,2,10, 16,8,14,6]); for(var y:int=0; y<img.height; y++) { for(var x:int=0; x<img.width; x++) { abr = (x%4) + ((y%4) << 2); data = img.getPixel(x, y); r = (((data >> 16 & 0xff) >> 4) < pattern[abr]) ? 0 : 0xff; g = (((data >> 8 & 0xff) >> 4) < pattern[abr]) ? 0 : 0xff; b = (((data & 0xff) >> 4) < pattern[abr]) ? 0 : 0xff; img.setPixel(x, y, (r << 16 | g << 8 | b)); } } } |