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