Как сдвинуть изображение влево (или вправо)?


Я пишу программу Java, которая делает некоторые вещи с изображениями.

Теперь мне нужно переместить изображение влево n pixels. Я могу вырезать изображение с фигурой, используя функции Graphics.setClip(Shape).Но я не могу переместить его в левое положение.

[EDIT] извините за отсутствие информации по вышеуказанному вопросу.

У меня есть образ, и я рисую его на холсте вот так:

@Override
public void paint(Graphics g){
    g.drawImage(image, 0, 0, this);
}

Мне нужно переместить мое изображение влево n pixels на моем холсте (чтобы я мог нарисовать что-то новое на месте с правой стороны после меняющийся).

изображение перед сдвигомВведите описание изображения здесь

Вот пример. Изображение 1-Исходное, второе-после сдвига. Пожалуйста, скажите мне, как я могу это сделать.

Спасибо всем!

1 2

1 ответ:

Один из способов-использовать BufferedImage.getSubimage(x,y,w,h).

import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

class ImageCrop {

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://i.stack.imgur.com/enifS.jpg");
        final BufferedImage image = ImageIO.read(url);
        int x = 43;
        final Image crop = image.getSubimage(x, 0, image.getWidth()-x, image.getHeight());
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new BorderLayout(4,4));

                gui.add(new JLabel(new ImageIcon(image)), BorderLayout.LINE_START);
                gui.add(new JLabel(new ImageIcon(crop)), BorderLayout.LINE_END);

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

Конечно, проще всего изменить:

@Override
public void paint(Graphics g){
    g.drawImage(image, 0, 0, this);
}

Кому:

@Override
public void paint(Graphics g){
    g.drawImage(image, -43, 0, this);
}