我有问题。我有一个精灵添加到库,我链接并命名其类“CarriedHead_Normal”。现在我想显示这个精灵并使每个黑色(000000)像素不可见(只是将背景转换为alpha)。
我知道我可以使用这个
var bmpd:BitmapData = new BitmapData(width, height, true, 0x000000)
但是我应该如何将它与我的函数合并,所以我从库中调用该类并使其变为透明的?
我目前的代码:
var imageSprite = new Sprite();
addChild(imageSprite);
var libraryImage:Bitmap = new Bitmap(new CarriedHead_Normal(0, 0))
imageSprite.addChild(libraryImage);
提前致谢。
答案 0 :(得分:0)
尝试类似:
var libraryImage:Bitmap = spriteToBitmap(new CarriedHead_Normal());
imageSprite.addChild(libraryImage);
function spriteToBitmap(sprite:Sprite, smoothing:Boolean = false):Bitmap
{
var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, true, 0x00000000);
bitmapData.draw(sprite);
bitmapData.threshold(bitmapData, bitmapData.rect, new Point(), '==', 0xff000000, 0x00000000);
return new Bitmap(bitmapData, "auto", smoothing);
}
答案 1 :(得分:0)
你可以通过多种方式做到这一点,有些方法比其他方式更好:
在旁边节点上,您的问题标题与您的实际问题无关
1)使用混合模式
根据您的图形和背景,您可以使用简单的blendMode
- 特别是BlendMode.SCREEN
。请注意,某些混合模式要求您的父容器具有blendMode
BlendMode.LAYER
2) copyPixels()使用alpha BMD
copyPixels()
可让您指定要在复制哪些像素时使用的字母BitmapData
(实际上是要复制的像素的Alpha值)。如果您有与您的黑色区域匹配的字母BitmapData
,则可以将其删除:
var b:BitmapData = new BitmapData( myImageBMD.width, myImageBMD.height, true, 0x00000000 );
b.copyPixels( myImageBMD, myImageBMD.rect, new Point, alphaBMD, new Point, false ); // copy our image, using alphaBMD to remove the black
3) floodFill()黑色区域
如果您的黑色区域是连续的并且您知道它开始的像素(例如,它是图像周围的黑框),那么您可以使用floodFill()
删除黑色区域
var b:BitmapData = new BitmapData( myImageBMD.width, myImageBMD.height, true, 0x00000000 );
b.copyPixels( myImageBMD, myImageBMD.rect, new Point ); // copy our image so we keep the original
b.floodFill( 0, 0, 0x00000000 ); // assuming the first pixel is black, floodFill() from here, replacing with transparence
这种技术最适用于像素艺术,其边缘定义明确。
4) threshold()删除黑色
threshold()
获取像素值,并将其替换为您设置的值,如果它们通过了某个测试(<
,<=
,==
等)。你可以用它来代替黑色透明。
var b:BitmapData = new BitmapData( myImageBMD.width, myImageBMD.height, true, 0x00000000 );
b.copyPixels( myImageBMD, myImageBMD.rect, new Point ); // copy our image so we keep the original
b.threshold( b, b.rect, new Point, "==", 0xff000000, 0x00000000 ); // test the pixels; if they're black, replace with transparence
同样,当边缘定义良好时,这种方法效果最好。
5)使用过滤器
您可以使用applyFilter()
创建新图片,使用BitmapFilter
删除黑色图片。可能只有其他过滤器可以工作,但ShaderFilter
肯定应该完成这项工作(你编写自己的着色器,所以你基本上可以做你想要的)。我对过滤器没有任何实际经验,所以我不能告诉你它们是如何工作的,但有些谷歌搜索应该给你必要的代码
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filters/ShaderFilter.html
6)使用photoshop(或同等版本)
最简单的方法;只需编辑您的图像即可删除黑色;更不用说了。)