您的位置:首页 > 其它

每天学一点flash(64) 彩色位图转换黑白照

2009-12-24 10:55 246 查看
今天看了外国一篇文章,觉得很有意思,于是在这里记录一下。彩色图转换成黑白照。在ps 要是将彩色的图转换黑白照的方式只是需要简单的动作。而在flash 处理起来也非常简单。

先选择一张喜欢的图片,然后进行处理。例如这张照片,图片中的是一个很不错的靓女。呵呵



现在通过一段代码:就可以进行转换成黑白的照片:



在这个过程中,其实对每一个像素点进行修改,才会产生这种效果。我们通过扫描来获取每一个像素点的值。然后利用位图的API修改每一个值产生这种结果。

test();
function test():void
{
trace(0xff);
trace(0xffffff);
var bit:Bitmap=new Bitmap(new Myclass(0,0));
addChild(bit);
bit.width=225;
bit.height=336;
for (var i:uint=0; i<bit.bitmapData.height; i++)
{
for (var j:uint=0; j<bit.bitmapData.width; j++)
{
var pixelValue:uint = bit.bitmapData.getPixel(j, i);
bit.bitmapData.setPixel(j,i,(pixelValue &0xff)<<16 | (pixelValue &0xff)<<8 |(pixelValue & 0xff));

}
}
}


当中的关键地方,在于对

var pixelValue:uint = bit.bitmapData.getPixel(j, i);
bit.bitmapData.setPixel(j,i,(pixelValue &0xff)<<16 | (pixelValue &0xff)<<8 |(pixelValue & 0xff));


进行获取每一个像素点的值。RGB的值,然后再根据位运算来确定这种效果。

主要的API:

setPixel(x:int, y:int, color:uint):void
设置 BitmapData 对象的单个像素。

getPixel(x:int, y:int):uint
返回一个整数,它表示 BitmapData 对象中在特定点 (x, y) 处的 RGB 像素值。
其他注意的地方:若是没有对图片进行修改尺寸的话,那么原先
for (var i:uint=0; i<bit.bitmapData.height; i++)
可以改成for (var i:uint=0; i<bit.height; i++)
否则就不可以.
其中0xff 和0xffffff 原本以为是一样,但是经过测试的结果,发现0xff 代表了0--255 的颜色,也就是常见的RPG值。
0xfffff 输出的结果16777215。 结果就显然不一样了。
大家不妨去测试一下。
有意思的是(pixelValue &0xff)<<16 这些通过位运算再移位的计算产生的结果为什么会产生黑白的效果呢?
黑白效果像素值是多少? 呢
如果想到不妨告诉我。
下面是通过扩展BItmap 类进行封装调用
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;

public class BitmapEx extends Bitmap
{

public function BitmapEx(bitmapdata:BitmapData=null)
{
super(bitmapdata,"auto",false);
}
//转换黑白照
public function ConvertToBW(Width:Number,Height:Number):void
{
for (var i:uint=0; i<Height; i++)
{
for (var j:uint=0; j<Width; j++)
{
var pixelValue:uint = this.bitmapData.getPixel(j, i);
this.bitmapData.setPixel(j,i,(pixelValue &0xff)<<16 | (pixelValue &0xff)<<8 |(pixelValue & 0xff));

}
}
}

}
}

测试:
var bitmap:BitmapEx=new BitmapEx(new Myclass(0,0));
bitmap.width=225;
bitmap.height=336;
addChild(bitmap);
bitmap.ConvertToBW(bitmap.bitmapData.width,bitmap.bitmapData.height);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: