我正在尝试在32位BitmapData上使用一些fillRects(即transparency = true和bg颜色设置为FFFF00FF(opaque magenta)。例如我使用:
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绘制的rect是Magenta,但它显然需要舞台的bg颜色。现在我的问题是:
有没有办法获得所需的效果(fillRect alpha适用于bitmapdata的bg颜色,而不是Flash阶段?)
答案 0 :(得分:2)
你的问题是假设fillRect就像是photoshop中的工具,你可以在其中绘制半透明矩形,它会自动混合。
不是,fillRect只是将指定矩形区域的所有位图像素设置为给定颜色。
您需要做的是创建具有所需大小和颜色的半透明位图,然后使用例如工作位图(画布)合并。 draw方法,如在这个简化的例子中:
var whiteTransparent:BitmapData = new BitmapData(100, 100, true, 0x80FFffFF);
var blackCanvas:BitmapData = new BitmapData(400, 400, false, 0);
var canvas:Bitmap = new Bitmap(blackCanvas);
addChild(canvas);
blackCanvas.draw(whiteTransparent);
最好的问候