May 01
ActionScript 3可以显示一幅通过代码计算得出RGB值而动态生成的bigmap图像。利用这种特性,演绎3D元素,制作影像和图片以及其他的效果都显得比较容易。为了在显示器屏幕中描画像素,就需要创建一个Bitmap和BitmapData类的实例,BitmapData表示一组像素,而Bitmap则是用来描画这些像素的一个DisplayObject对象。为了动态的描画出逼真的bitmap图像,就需要在各个框架中写入所有的像素。而实现这一点,至少有两种方法:一种是通过给每一个像素调用一次setPixel,还有一种是创建一个适当大小的ByteArray,然后将其传给BitmapData.setPixels.所以,如果你希望你的代码执行的足够快,那应该选择哪一种呢?
下面的代码应该是最快的了:
- outputBitmapData.lock();
- for(y = 0; y < STAGE_HEIGHT; ++y)
- {
- for(x = 0; x < STAGE_WIDTH; ++x)
- {
- r = (t*100 + 255 * x / STAGE_WIDTH)%255;
- g = 180;
- b = 180;
- outputBitmapData.setPixel(x, y, (r<<16) + (g<<8) + b);
- }
- }
- outputBitmapData.unlock();
你是否还有更好的提案呢?

May 5th, 2008 at 10:11 pm
在AS3里操纵单个像素应该没有比setPixel更快的了。批量处理像素setPixels也是最快的。虽然copyPixels更快,但是不够灵活。