Как я могу использовать drawImage (), чтобы обрезать изображение?

1

Я пытаюсь обрезать изображение 500x500, чтобы иметь только прямоугольник 300x300 в центре, например:

   Original  Image              
+-------------------+        +-------------------+
|     500 x 500     |        |     Crop Area     |
|                   |        |   +-----------+   |
|                   |        |   | 300 x 300 |   |
|                   |        |   |           |   |
|                   |        |   |           |   | 
|                   |        |   +-----------+   |     
|                   |        |                   |
+-------------------+        +-------------------+

Я вижу, что Graphics.drawImage() с 8 int параметрами говорит, что он нарисует область изображения, которая кажется подходящей для рисования только обрезанной области изображения, но когда я пробовал image.getGraphics().drawImage(image, 0, 0, 500, 500, 100, 100, 400, 400, null); он не правильно обрезал изображение.

Какие параметры я должен предоставить drawImage для обрезки моего изображения?

  • 0
    Возможно, мне было бы проще использовать subImage, но это только я ...
Теги:
crop
drawimage

1 ответ

2
Лучший ответ

Первые четыре параметра int представляют прямоугольную секцию изображения, на которое вы хотите нарисовать (целевое изображение), а последние четыре представляют прямоугольную секцию изображения, которое вы рисуете (исходное изображение). Если эти прямоугольники не имеют одинакового размера, исходное изображение будет перемасштабировано (выращено или сжато), чтобы соответствовать целевому изображению. Ваша попытка с drawImage(image, 0, 0, 500, 500, 100, 100, 400, 400, null) не совсем работает, потому что после того, как вы получите правильную область изображения, вы вырастите ее, чтобы она соответствовала всему изображению, Поскольку вы хотите обрезать изображение - изменяя его размеры - вы должны создать новое изображение, которое является правильным размером для обрезанной области, и нарисуйте это изображение.

Вот пример, который хранит ваше обрезанное изображение в BufferedImage:

//enter the appropriate type of image for TYPE_FOO
BufferedImage cropped = new BufferedImage(300, 300, BufferedImage.TYPE_FOO);
cropped.getGraphics().drawImage(image, 
        0, 0, 300, 300, //draw onto the entire 300x300 destination image
        100, 100, 400, 400, //draw the section of the image between (100, 100) and (400, 400)
        null);
image = cropped;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню