Увеличение и уменьшение изображений в Java - PullRequest
4 голосов
/ 18 февраля 2012

Я думаю, что вопрос довольно очевиден. Я хочу реализовать простую функцию масштабирования с использованием JSlider, как, например, в Windows Live Photo Gallery.

Я быстро просмотрел онлайн, но весь код, который я пытался использовать, похоже, содержит ошибки, когда я копирую его в Eclipse. Я действительно не хочу использовать стороннюю библиотеку, так как приложение может продаваться под названием компании. Кроме того, я начинаю понимать, что для предотвращения ошибок могут потребоваться некоторые меры предосторожности, но я не знаю, что это будет.

Так что, если кто-нибудь может предоставить мне некоторый Java-код для увеличения и уменьшения изображений, это будет с благодарностью.

P.S. Я планирую использовать изображение как ImageIcon внутри JLabel, которое будет добавлено к JScrollPane.

Ответы [ 2 ]

9 голосов
/ 18 февраля 2012

Этого легко добиться, используя масштабные преобразования исходного изображения. Предполагая текущую ширину изображения newImageWidth, текущую высоту изображения newImageHeight и текущий уровень масштабирования zoomLevel, вы можете сделать следующее:

int newImageWidth = imageWidth * zoomLevel;
int newImageHeight = imageHeight * zoomLevel;
BufferedImage resizedImage = new BufferedImage(newImageWidth , newImageHeight, imageType);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, newImageWidth , newImageHeight , null);
g.dispose();

Теперь замените исходное изображение originalImage в области отображения на resizedImage.

2 голосов
/ 02 августа 2014

Вы также можете использовать его следующим образом:

public class ImageLabel extends JLabel{
    Image image;
    int width, height;

    public void paint(Graphics g) {
        int x, y;
        //this is to center the image
        x = (this.getWidth() - width) < 0 ? 0 : (this.getWidth() - width);
        y = (this.getHeight() - width) < 0 ? 0 : (this.getHeight() - width);

        g.drawImage(image, x, y, width, height, null);
    }

    public void setDimensions(int width, int height) {
        this.height = height;
        this.width = width;

        image = image.getScaledInstance(width, height, Image.SCALE_FAST);
        Container parent = this.getParent();
        if (parent != null) {
            parent.repaint();
        }
        this.repaint();
    }
}

Затем вы можете поместить его в свой кадр и с помощью метода масштабирования с коэффициентом увеличения, для которого я использовал процентные значения.1005 *

...