【问题标题】:AS3 Bitmaps and FiltersAS3 位图和过滤器
【发布时间】:2016-10-31 02:57:46
【问题描述】:

我觉得我在这里遗漏了一些东西,所以希望这个问题能很快得到解答。

由于屏幕上移动的对象数量,我开始使用 blitting 来提高我的程序效率。现在我正在测试如何做不同的事情;我要过滤。

我正在尝试使用 applyFilter(); 应用一个简单的辉光滤镜; 问题是:

a) 仅当我将矩形定义为 bitmapData.generateFilterRect() 时它才有效,除了

b) 它忽略这一点并在裁剪整个图像时应用过滤器。如果你注意到,实际上只有左上角是发光的,其余的只是被切断了。

原草瓦

应用了辉光滤镜的草砖

我在这里错过了什么?

public function applyFilter(filter:*):void{
    bitmapData.applyFilter(bitmapData, bitmapData.generateFilterRect(new Rectangle(0,0, 100, 100), filter), new Point(0,0), filter); 
}

grass.applyFilter(new GlowFilter(0x000000));

【问题讨论】:

  • 出于好奇,如果您想获得性能,为什么不使用Starling
  • 我喜欢编写自己的引擎来了解更多信息。
  • 使用 Starling 并没有真正剥夺您编写自己的引擎的能力,它涵盖的内容与使用原生 flash.display.* API 为您所做的基本相同(只是渲染部分) .
  • 这个项目我快完成了。我只是在优化它一点。在这一点上改变所有图像的工作方式将是一个真正的痛苦。

标签: actionscript-3 bitmap


【解决方案1】:

这可能是你的问题:

应用过滤器后,生成的图像可能比输入图像大。例如,如果使用 BlurFilter 类对 (50,50,100,100) 的源矩形和 (10,10) 的目标点进行模糊处理,则目标图像中变化的区域大于 (10,10,60,60) ) 因为模糊。这在 applyFilter() 调用期间内部发生。

Source.

听起来您需要计算新的图像大小并将其绘制到屏幕上,而不是原始大小。

【讨论】:

  • 是的,这就是我使用 BitmapData.generateFilterRect() 的原因。我什至尝试扩展 Rectangle 参数以给它额外的空间,但它仍然裁剪。
  • 您可以添加用于将结果图像绘制到屏幕上的代码吗?因为看起来你只是缺少一些东西来解释新的更大尺寸,其中包括裁剪部分。您问题中的示例大小相同。
  • 所有数据都放在屏幕上的其他地方。这就是应用过滤器的原因。
  • 是的,但是当您应用过滤器时,您的图像会变得比原来更大。如果将其放在屏幕上其他地方的逻辑不知道尺寸变化,那么您将得到一个裁剪的图像。
  • 好的,我解决了。问题是我应该直接将过滤器应用于屏幕数据,而不是单个图像数据。感谢您的提示:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多