创建其他图像的一部分的图像

时间:2012-09-26 15:17:43

标签: java android bitmap sprite-sheet

我正在尝试在屏幕上绘制精灵表动画,这在我使用此代码之前工作正常。

    canvas.drawColor(Color.TRANSPARENT);
    Rect src = new Rect(CurrentSprite.x * SheetSize.x, CurrentSprite.y * SheetSize.y, (CurrentSprite.x * SheetSize.x) + SheetSize.x, (CurrentSprite.y * SheetSize.y) + SheetSize.y);
    Rect dst = new Rect(X, Y, X + SheetSize.x, Y + SheetSize.y);
    canvas.drawBitmap(bmp, src, dst, null);

但是我现在需要在我在屏幕上绘制之前旋转图像。所以我改变了代码,所以我正在制作精灵的本地副本。我要画这个但是在这里我遇到了问题。我正在使用Bitmap.createBitmap方法,但似乎这个方法什么也没做,因为当我看到屏幕时,屏幕上会绘制完整的精灵表,有时我会得到OutOfMemoryException(可以理解,因为完整的图像非常大)。

    canvas.drawColor(Color.TRANSPARENT);
    Matrix matrix = new Matrix();
    matrix.postRotate(Degrees);
    Bitmap tempAnimationBmp = Bitmap.createBitmap(bmp, CurrentSprite.x * SheetSize.x, CurrentSprite.y * SheetSize.y, (CurrentSprite.x * SheetSize.x) + SheetSize.x, (CurrentSprite.y * SheetSize.y) + SheetSize.y, matrix, true);
    canvas.drawBitmap(tempAnimationBmp, X, Y, null);
    tempAnimationBmp.recycle();

为什么我会获得完整的精灵表?

1 个答案:

答案 0 :(得分:0)

我建议使用其中一个DrawableContainer而不是尝试创建一堆位图。 Drawables非常容易使用 - 您只需设置尺寸,将其传递给画布,它就会将自己绘制到该位置的画布上。 Drawables的优点在于它们也非常容易制作,因此您可以创建一个自定义的SpriteDrawable类,该类从系统中获取资源并仅将其区域绘制到画布上。

通过处理此流程而不是尝试创建一堆位图,您将节省大量内存,并且当您尝试使用Android的图形系统时,可能会遇到很多麻烦。