10

我需要一些关于将位图分成小块的可能方法的信息。

更重要的是,我需要一些选项来判断。我检查了很多帖子,但我仍然不完全相信该怎么做:

  1. 剪切位图的一部分
  2. 如何切掉位图的中间区域?

这两个帖子是我发现的一些不错的选择,但我无法计算每种方法的 CPU 和 RAM 成本,或者我根本不应该为这个计算而烦恼。尽管如此,如果我要做某事,为什么不从一开始就以最好的方式去做。

我会很感激得到一些关于位图压缩的提示和链接,所以也许我可以结合这两种方法获得更好的性能。

4

2 回答 2

9

您想将位图分成几部分。我假设您想从位图中剪切相等的部分。例如,您需要位图中的四个相等的部分。

这是一种将位图分成四等份并将其放在位图数组中的方法。

public Bitmap[] splitBitmap(Bitmap src) {
    Bitmap[] divided = new Bitmap[4];
    imgs[0] = Bitmap.createBitmap(
        src,
        0, 0,
        src.getWidth() / 2, src.getHeight() / 2
    );
    imgs[1] = Bitmap.createBitmap(
        src,
        src.getWidth() / 2, 0,
        src.getWidth() / 2, src.getHeight() / 2
    );
    imgs[2] = Bitmap.createBitmap(
        src,
        0, src.getHeight() / 2,
        src.getWidth() / 2, src.getHeight() / 2
    );
    imgs[3] = Bitmap.createBitmap(
        src,
        src.getWidth() / 2, src.getHeight() / 2,
        src.getWidth() / 2, src.getHeight() / 2
    );
    return divided;
}
于 2013-12-24T06:46:32.483 回答
9

此功能允许您将位图拆分为行数和列数。

示例 Bitmap[][] bitmaps = splitBitmap(bmp, 2, 1); 将创建存储在二维数组中的垂直分割位图。2 列 1 行

示例 Bitmap[][] bitmaps = splitBitmap(bmp, 2, 2); 将一个位图拆分为四个位图,存储在一个二维数组中。2 列 2 行

public Bitmap[][] splitBitmap(Bitmap bitmap, int xCount, int yCount) {
    // Allocate a two dimensional array to hold the individual images.
    Bitmap[][] bitmaps = new Bitmap[xCount][yCount];
    int width, height;
    // Divide the original bitmap width by the desired vertical column count
    width = bitmap.getWidth() / xCount;
    // Divide the original bitmap height by the desired horizontal row count
    height = bitmap.getHeight() / yCount;
    // Loop the array and create bitmaps for each coordinate
    for(int x = 0; x < xCount; ++x) {
        for(int y = 0; y < yCount; ++y) {
            // Create the sliced bitmap
            bitmaps[x][y] = Bitmap.createBitmap(bitmap, x * width, y * height, width, height);
        }
    }
    // Return the array
    return bitmaps;     
}
于 2014-09-20T20:42:52.387 回答