2016-12-16 57 views
1

我要强制BitmapData平滑。flex/as3 - 如何强制BitmapData平滑无法绘制

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

如果我绘制位图,应用程序将放慢到下一步。 (这是灵活移动)

所以我需要如何强制bitmapData平滑而不重绘bitmapData。

(也,我不能用Bitmap(bitmapData).smoothing

我能为这个怎么办?

+0

尝试使用纹理和GPU渲染,寻找[八哥框架(https://www.google.com/search?q=as3+starling+smooth+纹理) –

回答

1

您正在设想平滑bitmapData中像素的唯一方法是通过在BitmapData.Draw()中将平滑布尔值设置为true来重新绘制bitmap容器。

解决方法是在容器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); 
+0

谢谢,但我告诉我,我不能使用Bitmap.smoothing那里... – idnumberone

+0

不,你说你不能使用(引用)“位图(bitmapData).smoothing”,它仍然是针对bitmapData本身。如果BMP数据是100w x 100h,则强制CPU处理10000个项目(像素)。我建议'Bitmap.smoothing'仅针对1个项目的CPU努力,并没有'画'参与。看起来很奇怪,但事实就是这样......我甚至在3D图形软件中看到它(为移动选择了100万个多边形=包含相同数百万个多边形=快速的慢VS 1组对象)。所以**平滑容器**而不是单个像素(位图数据)。视觉效果结果是一样的。 –

+0

显示**的示例代码如何重新创建您的问题** ...是否有技术原因或限制,为什么你根本不能使用“Bitmap.smoothing”?否则,你必须编写自己的双线性滤波器进行平滑处理。尝试使用一些基于GPU的[** Pixel Bender平滑器**](http://www.smart-page.net/blog/2010/02/21/smartaa-reconstruct-anti-aliasing-with-pixel-bender/ )代码在你的AS3项目中。在线教程查看如何在AS3代码中导入PBJ作为'= new shader()'对象。无论如何,这只是一个例子。 –