【问题标题】:flex/as3 - How to force BitmapData smooth not to drawflex/as3 - 如何强制 BitmapData 平滑不绘制
【发布时间】:2016-12-17 13:31:52
【问题描述】:

我要强制 BitmapData 平滑。

但我不能做BitmapData.draw(),因为应用程序的性能。

如果我绘制位图,应用程序会减慢到下一步。 (这是在 flex 移动设备上)

所以我需要如何在不重绘 bitmapData 的情况下强制 bitmapData 平滑。

(另外,我不能使用Bitmap(bitmapData).smoothing

我可以为此做些什么?

【问题讨论】:

标签: actionscript-3 apache-flex bitmapdata smoothing


【解决方案1】:

您假设平滑 bitmapData 中像素的唯一方法是重新绘制 bitmap 容器,并将 BitmapData.Draw() 中的平滑布尔值设置为 true。

解决方案是在容器Bitmap 对象本身上设置smoothing,而不是内部bitmapData。稍后您可以随时更新 bitmapData,但 Bitmap 对象将始终被平滑。

逻辑如下:

var myBMPData : BitmapData = new BitmapData(320, 240);
myBMPData.draw( someThing ); //just draw, no smoothing here for BitmapData

var myBMP : Bitmap = new Bitmap( myBitmapData );
myBMP.smoothing = true; //use smoothing on Bitmap that holds bitmapData

addChild(myBMP);

【讨论】:

  • 不,你说你不能使用(引用)Bitmap(bitmapData).smoothing,它仍然针对 bitmapData 本身。如果 BMPdata 为 100w x 100h,那么您将强制 CPU 处理 10 000 个项目(像素)。我建议 Bitmap.smoothing 仅针对 CPU 工作的一项,并且不涉及 drawing。看起来很奇怪,但就是这样……我什至在 3D 图形软件中也能看到它(为移动选择了 100 万个多边形 = 慢 VS 1 个包含相同数百万个多边形的组对象 = 快)。所以平滑容器而不是单个像素(位图数据)。视觉效果是一样的。
  • 显示如何重新创建您的问题的示例代码... 是否有技术原因或限制您不能使用Bitmap.smoothing?否则,您必须编写自己的双线性滤波器进行平滑处理。尝试在您的 AS3 项目中使用一些基于 gpu 的 Pixel Bender smoother 代码。查看在线教程如何在 AS3 代码中导入 PBJ 以用作 =new shader() 对象。无论如何,这只是一个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
相关资源
最近更新 更多