【发布时间】:2013-02-22 05:37:06
【问题描述】:
我正在尝试在 32 位 BitmapData 上使用一些 fillRects(即透明度 = true 并且 bg 颜色设置为 FFFF00FF(不透明的洋红色)。例如,我使用:
fillRect(rect, 0xFF0000FF);
正如预期的那样,这将绘制一个不透明的蓝色矩形,但是...
fillRect(rect, 0x550000FF);
这应该画一个半透明的蓝色矩形,对吧?但相反,我得到了一个深蓝色的矩形,好像蓝色和黑色混合在一起(但背景是洋红色,记住,所以我希望蓝色与下面的洋红色混合?)。
如果我将颜色值设置为 0x000000FF,它应该给我 100% 的底层洋红色,但我得到的是 100% 黑色。
BitmapData 是使用 32 位 ARGB 创建的,所以我想知道这里出了什么问题?
这似乎是默认的 AS3 行为?创建一个小型测试类后,它的行为确实像我解释的那样......
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Rectangle;
public class Main extends Sprite
{
public function Main()
{
stage.color = 0x000000;
var bd:BitmapData = new BitmapData(400, 300, true, 0xFFFF00FF);
var b:Bitmap = new Bitmap(bd);
addChild(b);
bd.fillRect(new Rectangle(0, 0, 200, 200), 0x000000FF);
}
}
}
您会期望使用 fillRect 绘制的矩形是洋红色,但它显然采用舞台的背景颜色。现在我的问题是:
有没有办法获得想要的效果(fillRect alpha 适用于位图数据的 bg 颜色,而不是 Flash 阶段)?
【问题讨论】:
标签: actionscript-3 alpha bitmapdata argb