Actionscript 3 为什么不是';位图数据不是透明的吗?

Actionscript 3 为什么不是';位图数据不是透明的吗?,actionscript-3,Actionscript 3,从我所读到的一切来看,这应该是透明的。我看到一个黑色的大正方形。是什么原因造成的?使用此选项 var subimage = new Bitmap(); subimage.bitmapData = new BitmapData(25, 25, true, 0); addChild(subimage); 而不是 new BitmapData(25, 25, true, 0x00000000); 0xFF000000为黑色(0x000000),alpha等于1 0x0000

从我所读到的一切来看,这应该是透明的。我看到一个黑色的大正方形。是什么原因造成的?

使用此选项

    var subimage = new Bitmap();
    subimage.bitmapData = new BitmapData(25, 25, true, 0);
    addChild(subimage);
而不是

new BitmapData(25, 25, true, 0x00000000);
0xFF000000为黑色(0x000000),alpha等于1

0x00000000为黑色(0x000000),alpha等于0

以下是颜色和alpha的工作原理:

//编辑:

丹尼斯·克罗格和斯特里尔是对的,0x00000000==0。
问题似乎出在其他地方,而不是粘贴到的代码中。

ActionScript使用32位十六进制数字表示具有透明度的颜色值。ARGB颜色作为32位变量由4组(每组8位/或2个十六进制)指定:

二进制:aaaaaa rrrrrrrrrr ggggggbbbbbbbb

十六进制:AA RR GG BB


A表示alpha值(透明度),R表示rd,G表示绿色,B表示蓝色。每组定义每个颜色通道的强度,A为alpha,R为红色,G为绿色,B为蓝色。alpha通道上的全强度表示无alpha(FF),无强度(00)表示全alpha。因此,透明像素颜色值为0x00rrggbb。

毫无意义:我尝试了以下代码:

new BitmapData(25, 25, true, 0);
我有一个黄色的盒子,上面有一个半透明的黑盒子。“imageTransparent”是完全看不见的

我还尝试了您的方法,先创建位图,然后更改bitmapData。没有区别,还是看不见


San.chez:0等于0x00000000,不管怎样。它是一个无符号整数,ActionScript不会神奇地改变它。您的链接很好。

您可以创建或传递给新对象的构造函数,也可以在创建后通过引用对其进行编辑。两种选择都有效:

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;

public class TestBitMap extends Sprite
    {
        public function TestBitMap() {
            var imageYellow:Bitmap = new Bitmap(new BitmapData(100, 100, true, 0xFFFFFF00));
            var imageTransparent:Bitmap = new Bitmap(new BitmapData(100, 100, true, 0));
            var imageSemiTransparent:Bitmap = new Bitmap(new BitmapData(100, 100, true, 0x99000000));
            imageTransparent.x = 25;
            imageTransparent.y = 25;
            imageSemiTransparent.x = 50;
            imageSemiTransparent.y = 50;
            addChild(imageYellow);
            addChild(imageTransparent);
            addChild(imageSemiTransparent);
        }       
    }
}

我似乎记得MXML组件对color参数(从字符串转换为color对象)做了类似的操作,可能已经在那里了您已经找到了它吗?:)嘿,丹尼斯。谢谢你的回复。我接受你的答案,因为这是最接近正确的答案——我忘了考虑我写的其他代码。这真的应该教会我在发现的虫子上睡觉。感谢大家:感谢你们调查这件事,尽管结果什么都不是。抱歉。0和0x00000000(或0x0)之间没有区别,因为它们的计算结果都为零(
trace(0x00000000==0);//prints true
),所以黑色方块是由其他原因造成的。但从可读性的角度来看,我认为最好将其表示为十六进制值,因为它更明显地表示颜色值。此代码是正确的(除了您没有键入子图像变量),对我来说效果很好。如何嵌入SWF?你使用wmode=transparent吗?我没有嵌入SWF,我只是用独立播放器打开它。看来我一直在引导你们去追逐一只鹅,而这只虫子肯定在别的地方。很抱歉。
package 
{
    //Imports
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;

    //Document Class
    public class Main extends Sprite 
    {
        //Constructor
        public function Main() 
        {
            var bmpData:BitmapData = new BitmapData(200, 200, true, 0x5500FF00);
            var bmp:Bitmap = new Bitmap(bmpData);

            addChild(bmp);

            var bmp2:Bitmap = new Bitmap();
            bmp2.bitmapData = new BitmapData(200, 200, true, 0x55FF0000);
            bmp2.x = bmp2.y = 200;

            addChild(bmp2);
        }
    }
}