我有一个Flash文件,用于加载透明PNG(线条图),并使用Flash允许用户选择绘图颜色,并立即更改颜色。
这一切都像它应该的那样工作。我正在使用UILoader组件加载我通过flashvars接收的图像,然后根据需要更改颜色。
唯一的是,图像有时看起来不是很平滑。我看过各种文章,人们谈论在位图上使用smoothing = true。但是我不确定在哪里设置它,或者它是如何工作的。
我是Flash和ActionScript的新手,有人可以帮帮我吗?下面是我的代码(main.as)。我省略了changeColor()和getFlashvars()函数以及导入行。因为我觉得这里并不重要,并且尽量保持一切简单和短暂。
非常感谢您给我的任何帮助和指针!
package {
public class Main extends MovieClip {
public function Main() {
init();
if(getFlashvars().img != undefined) {
if(getFlashvars().clr != undefined) {
loadImage(getFlashvars().img, getFlashvars().clr);
} else {
loadImage(getFlashvars().img);
}
} else {
loadImage('example.png', 'FFFFFF');
}
}
private function init() {
ExternalInterface.addCallback('changeColor', this.changeColor);
progressBar.visible = false;
progressBar.mode = 'manual';
progressBar.source = uiLoader;
uiLoader.scaleContent = true;
uiLoader.addEventListener(ProgressEvent.PROGRESS, eventImageProgress);
uiLoader.addEventListener(Event.COMPLETE, eventImageLoaded);
}
/**
* Load a new image from the given url. Replace the color in it with newColor
*/
public function loadImage(url:String, newColor:String='') {
//progressBar.visible = true;
uiLoader.load(new URLRequest(url));
if(newColor.length > 0) {
changeColor(newColor);
}
}
}
答案 0 :(得分:3)
为stated clearly in the documentation,平滑是位图的公共属性。
myBitmap.smoothing = true;
也可以在调用新的位图构造函数时设置
var myBitmap:Bitmap = new Bitmap(myBitmapData, PixelSnapping.AUTO, true);
//where the last boolean represents the smoothing property
如果感觉平滑不够,也可以尝试在显示对象上设置光线模糊滤镜。
答案 1 :(得分:2)
Bitmap(UILoaderTarget.content).smoothing = true;
答案 2 :(得分:0)
我在Flex中所做的是创建一个新组件,如果可能的话,在其内部位图上设置平滑属性。类似的东西可能在Flash中可行。
public class SmoothImage extends Image
{
override protected function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
if (content is Bitmap)
{
var bitmap : Bitmap = content as Bitmap;
if (bitmap != null &&
bitmap.smoothing == false)
{
bitmap.smoothing = true;
}
}
}
}
然后你就可以使用它:
image = new SmoothImage();
image.source = url;
可能会有帮助!主要思想是访问位图组件本身以设置平滑属性,无论是在您的文件中还是在单独的组件中发生,这就是您需要做的事情。
答案 3 :(得分:0)
如果您在使用此平滑代码时遇到问题,则仅当您从同一域或将您添加到其crossdomain.xml文件的域中获取图像时,此方法才有效。
在完整的处理程序中,你可以做类似的事情
// First, you need to copy the loaded image.
var displayObject :DisplayObject = uiLoader.content;
var bitmapData :BitmapData = new BitmapData(displayObject.width, displayObject.height);
bitmapData.draw(displayObject);
// Then create a new image from the loaded image.
var bitmap :Bitmap = new Bitmap(bitmapData);
bitmap.smoothing = true; // This is what actually does the anti-aliasing.
addChild(bitmap);
答案 4 :(得分:0)
但我不确定在哪里设置 此
我想说,在最简单的形式中,您可以在Event.COMPLETE的处理程序中将加载的图像(位图)上的平滑设置为true,因此在您的情况下为eventImageLoaded。
像这样的例子:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
loader.load(new URLRequest("http://www.google.com/images/logos/ps_logo.png"));
function imageLoaded(e:Event):void {
e.target.content.smoothing = true;
// Or Bitmap(e.target.content).smoothing = true; if you prefer.
}