0

我想要的是可以分成几种或一种方法,无论是最好的。

我设置了四个值(作为字段):

  1. 整个图像的图像宽度(可以说是画布)
  2. 整个图像的高度(画布的高度)
  3. 填充(我想要多少像素作为填充)
  4. 我想要在宽度和高度中分别有多少图像(可以是单独的值)

我想要的是有一个完整的图像,我把小图像放在里面(这些是我想从方法中获得的位图大小)。

我基本上想要里面有图像的大小,包括宽度和高度。以及整个图像视图中小图像的坐标。

一个小例子可能是:

  • 图像的宽度是 200,我想要一个 4 的填充,我想在图像的一行上有 3 个图像。
  • 计算可能如下所示:

    (200 - (4*(3+1))) / 3 = 61,33;

  • 3+1 只是因为我想在小图像的两侧都有填充。

但这仅适用于宽度,我希望有一个适用于高度的通用解决方案。

并计算画布图像内每个图像的高度和宽度。

只是在上面放一些糖。我想要里面的每个图像的 x 和 y 坐标。

如何才能做到这一点?我如何获得每一个价值?位图(我正在开发 android)存储在 ArrayList 中。

基本上我想要这个,一个基本的网格布局: http: //developer.android.com/images/ui/gridview.png 我基于这个图像的值:

  • 我有浅蓝色区域的大小,
  • 包括深蓝色图像之间的空间(填充)
  • 以及我想要在每一行和每一列中有多少个深蓝色点。

我想要的是尺寸(深蓝色斑点的宽度和高度),以及这些图像的坐标(它们应该放置在浅蓝色区域的位置,x 和 y 坐标)。

有人对此有很好的解决方案吗?

为清楚起见更新了文本

4

2 回答 2

1

您所描述的是游戏开发人员所说的 spritesheets、tilesheets、tilesets 或其他任何东西。

所有这些背后的总体思路是您拥有一个特定类型的图像文件,并在该图像中创建子图像,这些子图像可以被拉出并在您的程序中单独使用。通常在电子游戏中,它们的大小是一致的,但不一定是这样。

查看此链接上的答案:如何在 Java 中提取此图像的一部分?这里的答案解释了如何将图像分成几个部分。

如果你找不到你要找的东西,请查看游戏开发人员如何处理 spritesheets,例如了解他们是如何做到的。

于 2013-07-17T13:10:30.360 回答
1

这是我正在做和想做的代码。如果有人知道如何改进代码,我将更改我接受的答案。

public class ClassName {

public static int bitmapSizeWidth;
public static int bitmapSizeHeight;
public static final int bitmapPadding = 8;
public static final int howManyImagesColumn = 3;
public static final int howManyImagesRows = 2;

public static Bitmap folderBitmap(ArrayList<Bitmap> bitmapArray, int imageViewWidth, int imageViewHeight) {
    bitmapSizeWidth = imageViewWidth;
    bitmapSizeHeight = imageViewHeight;

    Bitmap b = Bitmap.createBitmap(bitmapSizeWidth, bitmapSizeHeight, Bitmap.Config.RGB_565);
    Canvas c = new Canvas(b);

    //Lets do it in a set coordinate system now
    if (bitmapArray.size() >= 1)
        c.drawBitmap(bitmapArray.get(0), bitmapPadding, bitmapPadding, paint);

    if (bitmapArray.size() >= 2)
        c.drawBitmap(bitmapArray.get(1), calculateSecondCoord().xPos, bitmapPadding, paint);

    if (bitmapArray.size() >= 3)
        c.drawBitmap(bitmapArray.get(2), calculateThirdCoord().xPos, bitmapPadding, paint);

    if (bitmapArray.size() >= 4)
        c.drawBitmap(bitmapArray.get(3), bitmapPadding, calculateSecondCoord().yPos, paint);

    if (bitmapArray.size() >= 5) {
        c.drawBitmap(bitmapArray.get(4), calculateSecondCoord().xPos, calculateSecondCoord().yPos, paint);
    }

    if (bitmapArray.size() >= 6) {
        c.drawBitmap(bitmapArray.get(5), calculateThirdCoord().xPos, calculateSecondCoord().yPos, paint);
    }

    return b;
}

public static BitmapSize calculateSingleBitmapSize(int imageViewWidth, int imageViewHeight) {
    bitmapSizeWidth = imageViewWidth;
    bitmapSizeHeight = imageViewHeight;
    BitmapSize bsize = new BitmapSize();
    bsize.widthSize = (int) (bitmapSizeWidth -
            (bitmapPadding * (howManyImagesColumn + 1))) / howManyImagesColumn;
    bsize.heightSize = (int) (imageViewHeight - (bitmapPadding * (howManyImagesRows + 1))) / howManyImagesRows;
    return bsize;
}

/*
 * First coord = padding
 * Second coord (bitmapPadding) + calculateSingleBitmapSize(bitmapSizeWidth);
 * Third coord (bitmapPadding * 3) + (calculateSingleBitmapSize(bitmapSizeWidth) * 2)
 * The math is supposed to be correct but can perhaps be done in a more efficient way
 */
private static BitmapCoord calculateSecondCoord() {
    BitmapCoord bCoord = new BitmapCoord();
    bCoord.xPos = (int) (bitmapPadding * (howManyImagesColumn - 1)) + calculateSingleBitmapSize(bitmapSizeWidth, bitmapSizeHeight).widthSize;
    bCoord.yPos = (int) (bitmapPadding * (howManyImagesRows)) + calculateSingleBitmapSize(bitmapSizeWidth, bitmapSizeHeight).heightSize;

    return bCoord;
}

private static BitmapCoord calculateThirdCoord() {
    BitmapCoord bCoord = new BitmapCoord();
    bCoord.xPos = (int) (bitmapPadding * howManyImagesColumn) + calculateSingleBitmapSize(bitmapSizeWidth, bitmapSizeHeight).widthSize * 2;
    bCoord.yPos = (int) (bitmapPadding * howManyImagesRows - 1) + calculateSingleBitmapSize(bitmapSizeWidth, bitmapSizeHeight).heightSize * 2;

    return bCoord;
}

public static class BitmapSize {
    public int widthSize;
    public int heightSize;
}

static class BitmapCoord {
    int xPos;
    int yPos;
}
}
于 2013-07-19T08:08:11.193 回答