【问题标题】:AS3 BitmapData fillRect with Transparency not working as expected具有透明度的 AS3 BitmapData fillRect 无法按预期工作
【发布时间】: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


    【解决方案1】:

    您的问题是假设 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);
    

    最好的问候

    【讨论】:

    • 附注draw 方法有更多选项可供使用:) 但这是一个非常简单的示例,说明您必须做什么
    • 感谢您的提示!是的,draw 方法可以做得更多,但速度也慢很多。由于此代码用于快速滚动游戏,因此我不希望使用 draw()。
    • 你最好使用 copyPixels() 而不是 Draw() 因为它更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多