2012-01-25 35 views
0

我将一个AS3(Flash)应用程序移植到Java Android。我需要一个同等功能的这个原型: copyPixels(sourceBitmapData:的BitmapData,sourceRect:矩形,destPoint:点,alphaBitmapData:的BitmapData = NULL,alphaPoint:点= NULL,mergeAlpha:布尔= FALSE):无效Java位图合成如何

的重要的参数是SourceBitmap,SourceRect,DestPoint和MergeAlpha,我不需要其他参数。现在我正在使用Java中的Bitmap类,是否有可能通过Bitmap类来实现这样的功能,该功能可以快速克服Android Java糟糕的性能?

也许我应该使用BufferedImage或其他东西,但我迷路了,因为Java有很多图像/位图任何类执行类似的职责,而AS3只有2。我还没有找到一些代码,做我想做的而无需诉诸某种形式的Canvas类,我想避免因为Java Android的性能问题。在Bitmap类中有CopyPixels函数,但是根据我的理解,它不能合成Alpha值。我确信有一些代码可以做我所做的事情,并希望我不必重新发明轮子。

感谢您的回答/评论。

回答

1

您应该使用android.graphics.Bitmap类。 Android画布实际上非常高效。它只是一个包装,允许您在位图上进行基本绘制。如果您看看一些openGL示例,那么使用canvas的绘图通常比使用Java的openGL快。性能问题是什么?也许SO可以帮助解决这些问题。另外,您可以通过遍历位图中的像素并自行混合颜色来自己完成该操作。这并不难,但真正的表现与Canvas类没有太大的不同。

+0

我已经在使用android.graphics.Bitmap – user1169933

+0

我当然相信Canvas比OpenGl快,但使用Canvas作为占位符来合成图形很慢。这是因为您需要将位图复制到画布,然后再将它们复制回位图。如果可能,将位图复制到具有alpha合成的位图(使用缓冲区而不是单个像素)将是最佳解决方案。性能问题是帧速慢,Java GC不工作时挂起,屏幕上闪烁等等......当你推入大量像素时,C++所没有的问题类型。感谢您的评论,了解Canvas并不是瓶颈。 – user1169933

+0

你其实不需要复制很多东西。使用带有位图的Canvas构造函数,或者调用SetBitmap()。这些不应复制位图。它应该只改变位图像素。你是什​​么意思关于复制位图? GC为什么要花太长时间?你是否在每一帧创建和回收位图? – Samuel