8.5.处理象素

问题
我要读取和设置位图的单个象素
解决办法
使用BitmapData类的getPixel( ), setPixel( ), getPixel32( ),和setPixel32( ) 方法
讨论
在ActionScript 3.0里设置和读取象素是很简单的。要读取象素值只要指定象素x,y坐标给getPixel()方法就可以了。设置象素,只要把坐标和颜色值传给setPixel()方法。

getPixel( ) 和setPixel( ) 方法是专门为不透明的BitmapData 类实例所用,而getPixel32( ) 和setPixel32( ) 则支持alpha通道的位图。不透明的位图是24-bit, 红,绿,蓝各占8位,透明位图多一个8位的alpha通道,可以通过BitmapData 构造器指定是否为透明位图。

下面的代码创建了一个白色的,32位的BitmapData,而且设置了1000 个随机红色半透明的象素值:
+展开
-ActionScript
var bitmap:BitmapData = new BitmapData(100, 100, true, 0xffffffff);
var image:Bitmap = new Bitmap(bitmap);
addChild(image);
for(var i:int = 0; i < 1000; i++) {
bitmap.setPixel32(Math.round(Math.random( ) * 100),
Math.round(Math.random( ) * 100),
0x88ff0000);
}

如果在透明的BitmapData上使用setPixel( ),那么alpha 通道会被设置100不透明,如果在不透明的图片上使用setPixel32( ),那么alpha通道会被忽略,相当于没有alpha通道。通常,最好在正确的类型上使用正确的方法。

getPixel方法返回的数取决于具体的位图类型,它返回24或32位的数字。下面的类设置了初步的颜色,首先使用BitmapData的noise( )方法产生一些随机的颜色,然后加入一个文本框,监听enterFrame 事件。每一帧得到鼠标所在位置的象素值转换为十六进制字符串:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.events.Event;
public class ColorChooser extends Sprite {
private var _bitmap:BitmapData;
private var _textfield:TextField;
public function ColorChooser( ) {
_bitmap = new BitmapData(100, 100, false, 0xffffffff);
var image:Bitmap = new Bitmap(_bitmap);
addChild(image);
_bitmap.noise(1000, 0, 255, 1|2|4, false);
_textfield = new TextField( );
addChild(_textfield);
_textfield.y = 100;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void {
var colorVal:Number = _bitmap.getPixel(mouseX, mouseY)
_textfield.text = "#" + colorVal.toString(16).toUpperCase( );
}
}
}

加支付宝好友偷能量挖...


评论(0)网络
阅读(117)喜欢(0)flash/flex/fcs/AIR