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

从我读过的所有内容来看,这应该是透明的。我看到一个黑色的大方块。是什么原因造成的?

4

4 回答 4

13

用这个

new BitmapData(25, 25, true, 0x00000000);

代替

new BitmapData(25, 25, true, 0);

0xFF000000 是黑色(0x000000),alpha 等于 1

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

这是一个很好的解释颜色和阿尔法如何工作: http: //myflex.wordpress.com/2007/09/07/about-hex-color-codes-in-flex-as3/

//编辑:

Dennis Krøger 和 strille 是对的,0x00000000 == 0。看起来问题出在其他地方,而不是在您粘贴的代码中。

于 2012-08-25T13:04:34.397 回答
3

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

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);
        }
    }
}
于 2012-08-25T17:28:42.693 回答
3

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

二进制: AAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB

十六进制:AA RR GG BB

A代表alpha值(透明度),R是rd,G是绿色,B是蓝色。每个组定义每个颜色通道的强度,A 是 alpha,R 是红色,G 是绿色,B 是蓝色。Alpha 通道上的完全强度意味着没有 Alpha (FF),没有强度 (00) 意味着完全 Alpha。所以一个透明的像素颜色值为0x00rrggbb。

于 2012-08-25T13:10:56.233 回答
2

这没有任何意义:我尝试了以下代码:

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);
        }       
    }
}

我得到了一个黄色盒子,上面有一个半透明的黑色盒子。“imageTransparent”完全不可见。

我还尝试了先创建位图,然后更改位图数据的方法。没区别,还是看不出来。

San.chez:0 等于 0x00000000,无论如何。它是一个无符号整数,ActionScript 不会神奇地改变它。不过你的链接很好。

于 2012-08-25T16:13:32.593 回答