在没有位图转换的情况下在SurfaceView上旋转android.graphics.picture对象?

时间:2013-10-18 16:27:38

标签: android bitmap rotation

无法获取android.graphics。 图片 对象旋转,但翻译是可以的。以下代码中没有摄像头

为了制作动态精灵,将记录绘图原语转换为android.graphics。 图片 对象供以后使用似乎始终比单个用户更有效在onDraw期间绘制原始图形。 Picture对象与位图非常相似(如果不相同?),可以保存并从位图恢复。

然而,为了能够旋转这些图片,我想避免在录制()之后将它们保存为位图。也就是说,只需使用像bitmaps这样的Picture对象, canvas api似乎意味着可能。也许Picture API不太复杂,但更有可能我只是做错了。

Bitmaps与图片的画布API不是平行的,例如有一个:

    canvas.drawBitmap(bitmap_Sprite, matrix, null); // Draw sprite with matrix, no Paint

还有一个:

    canvas.drawPicture(picture_Sprite, destination_rectangle); Draw sprite into rect.

不是 a:

    canvas.drawPicture(picture_Sprite, matrix ...)
  • 详情

想象一下,bitmap_Sprite和picture_Sprite都是一个“罗盘箭头”,表示它在旋转过程中指向的位置。

在onDraw()调用中,使用位图版本,这可以:

     matrix = new matrix();
     matrix.setRotate(angle);  // angle is ++ during onDraw(canvas)

     // Draw arrow, matrix rotates it as expected:
     canvas.drawBitmap(bitmap_Sprite, matrix, null); // null = no Paint obj

但是使用图片对象尝试相同的事情,我能解决这个问题的唯一方法是旋转destination_rectangle(包含箭头),如下所示:

     //destination_rectangle sized correctly to wrap previously recorded picture obj.
     matrix2 = new matrix();
     matrix2.setRotate(angle);  // angle is ++ during onDraw(canvas)

     matrix2.mapRect(destination_rectangle); // apply rotation
     canvas.drawPicture(picture_Sprite, destination_rectangle);

但所有这一切都是 pivot 围绕某个位置的矩形,它不会旋转矩形(和箭头)本身。

  • 的问题:
    • 正在使用目标矩形。错误的方法吗?
    • 使用Picture对象甚至可以旋转吗?

当然,如果我无法让Picture对象旋转,那么我可以直接使用以前创建的位图/ mipmaps。那么

  • 一般来说,假设可以像Bitmaps一样使用Picture对象,我真的可以节省使用动态创建的图片而不是动态创建它们的开销,将它们保存为位图,然后重新加载位图以完成矩阵内容?(!)

1 个答案:

答案 0 :(得分:1)

只需使用Canvas.concat,您可能也需要保存/恢复