кадрирование изображения java - PullRequest
4 голосов
/ 16 августа 2010

Мне известно о BufferedImage.getSubimage Однако он не может работать с обрезанными изображениями, размер которых меньше размера обрезки, за исключением исключения:

java.awt.image.RasterFormatException: (y + height) is outside raster

Я хочу иметь возможность обрезать PNG / JPG / GIF до определенного размера, однако, если изображение меньше, чем сам центр области обрезки на белом фоне. Есть ли призыв сделать это? Или мне нужно создать изображение вручную, чтобы центрировать изображение, если так, как мне поступить?

Спасибо

1 Ответ

9 голосов
/ 16 августа 2010

Вы не можете обрезать изображение больше, только меньше.Итак, вы начинаете с измерения цели, скажем, 100x100.И ваш BufferedImage (bi), скажем, 150x50.

Создайте прямоугольник вашей цели:

Rectangle goal = new Rectangle(100, 100);

Затем пересекайте его с размерами вашего изображения:

Rectangle clip = goal.intersection(new Rectangle(bi.getWidth(), bi.getHeight());

Теперь клип соответствует той части bi, которая соответствует вашей цели.В этом случае 100 x50.

Теперь получите subImage, используя значение clip.

BufferedImage clippedImg = bi.subImage(clip,1, clip.y, clip.width, clip.height);

Создайте новый BufferedImage (bi2), размерgoal:

BufferedImage bi2 = new BufferedImage(goal.width, goal.height);

Заполните его белым (или любым другим цветом bg, который вы выберете):

Graphics2D big2 = bi2.getGraphics();
big2.setColor(Color.white);
big2.fillRect(0, 0, goal.width, goal.height);

и нарисуйте на нем обрезанное изображение.

...