【问题标题】:Create image of part of an other image创建其他图像的一部分的图像
【发布时间】:2012-09-18 06:33:20
【问题描述】:

我正在尝试在屏幕上绘制一个精灵表动画,这在我使用此代码之前效果很好。

    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();

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

【问题讨论】:

标签: java android bitmap sprite-sheet


【解决方案1】:

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

通过处理这个流程而不是尝试创建一堆位图,您将节省大量内存,并且当您尝试更多地使用 Android 的图形系统时可能会很头疼。

【讨论】:

    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 2018-04-06
    • 2013-03-22
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多