Мне нужно извлечь область пикселей, описанную (2n + 1) x (2m + 1) с центром в левом образе (xl, yl). n и m являются пользовательскими параметрами ввода, а xl и yl уже определены. Пока у меня есть этот код:
for(int xl = n; xl < picOneGreyScale.getWidth() - n; xl++) {
for(int yl = m; yl < picOneGreyScale.getHeight() - m; yl++) {
//extract (2n+1) x (2m+1) pixel region centred on leftimage (xl,yl);
for(int nArea = xl-n; nArea < xl+n+1; nArea++) {
for(int mArea = yl-m; mArea < yl+m+1; mArea++) {
*code here*
}
}
Я не уверен, как продолжить. Я определил BufferedImage с именем leftRegion:
BufferedImage leftRegion = new BufferedImage((2*n+1),(2*m+1),BufferedImage.TYPE_BYTE_GRAY);
, который я собираюсь использовать для «извлечения» моей области пикселей. Мои мысли до сих пор таковы: где написано код здесь , чтобы извлечь пиксель в текущем местоположении (используя getRGB?), А затем вложить другой цикл for, чтобы поместить этот пиксель в правильные координаты x, y для leftRegion , Однако я не уверен, как это сделать, или я думаю, что это слишком сложно. В качестве альтернативы можно использовать getRGB с расширенными аргументами:
getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
вместо двух внутренних циклов for, но опять же, мне не очень интересно, как это реализовать. Наконец, есть метод для BufferedImage, называемый copyData, который выглядит так, как будто он может быть релевантным, но я не уверен, как его использовать. Какой лучший способ реализовать это? Большое спасибо как всегда.
Дополнительная информация:
Хорошо, я пытаюсь использовать метод getSubImage класса BufferedImage:
leftRegion = picOneGreyScale.getSubimage(xl, yl, (2*n+1), (2*m+1));
только я получаю сообщение об ошибке "(y + высота) вне растра". Как работает getSubImage? Будет ли изображение центрировано вокруг xl, yl, при этом ширина и высота будут вытянуты одинаково с обеих сторон, или это будет работать по-разному? Я даже иду по правильному пути?