Я пишу приложение для Android, которое обрабатывает большие растровые изображения, и нужно разбить растровое изображение на отдельные «плитки» и обработать каждую плиту индивидуально, прежде чем объединять их в конечном растровом изображении.Разделение и воссоединение растрового изображения
Любые подсказки о том, как это сделать? Я думал, что это будет достаточно просто с помощью createBitmap() и определения меньших фрагментов в нескольких вложенных циклах, но это не так просто, как я думал, потому что 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!??
}
}