我正在编写一个处理大型位图的 Android 应用程序,并且需要将位图拆分为单独的“图块”并单独处理每个图块,然后再将它们重新组合到最终位图中。
关于如何做到这一点的任何线索?我认为使用 createBitmap() 并在几个嵌套的 for 循环中指定较小的图块会很简单,但这并不像我想象的那么容易,因为 setPixels 不像我想象的那样工作。
我遇到的一个复杂情况是,“图块”需要在它们不在较大位图边缘的地方重叠,因为处理需要在位图两侧看到几个额外的像素。如果不需要通过简单地在图像边缘添加几层黑色像素来分割图像,我可以解决这个问题,但这不适用于瓷砖,因为它们需要实际周围像素的信息或处理将不起作用。
有没有更简单的方法来做到这一点?如果没有,我该如何使用 setPixels 和 createBitmap 来做呢?
到目前为止我的代码:
Bitmap finalImg = Bitmap.createBitmap(sourceImage.getWidth(), sourceImage.getHeight(), Bitmap.Config.ARGB_8888); //Bitmap to store the final, processed image
Bitmap tile = null; //Temporary Bitmap to store tiles
int tileDiameter = 500; //Width and height of tiles
int borderWidth = 5; //Amount of pixel overlap from other tiles
for (int y = 0 ; y < sourceImage.getHeight() ; y += tileDiameter) {
for (int x = 0 ; x < sourceImage.getWidth() ; x += tileDiameter) {
if (x == 0) {
if (y == 0) {
tile = Bitmap.createBitmap(sourceImage, x, y, (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
else {
tile = Bitmap.createBitmap(sourceImage, x, (y - borderWidth), (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
}
else {
if (y == 0) {
tile = Bitmap.createBitmap(sourceImage, (x - borderWidth), y, (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
else {
tile = Bitmap.createBitmap(sourceImage, (x - borderWidth), (y - borderWidth), (tileDiameter + borderWidth), (tileDiameter + borderWidth));
}
}
processor.process(tile);
//I need to attach this (processed) tile to it's correct location in finalImg. How!??
}
}