我正在编写一个Java程序,用图像处理一些东西。
现在我需要将图片移到左n pixels
。我可以使用Graphics.setClip(Shape)
函数剪切图像的形状。但我无法将其移动到左对齐。
[编辑]很抱歉上述问题缺乏信息。
我有一张图片,并在这样的画布上绘制:
@Override
public void paint(Graphics g){
g.drawImage(image, 0, 0, this);
}
我需要将我的图像移动到画布上的左n pixels
(所以我可以在移动后向右侧的地方画一些新的东西)。
这是一个例子。图像1是原始图像,第二图像是移位后的图像。 请告诉我该怎么做。
全部谢谢!
答案 0 :(得分:3)
一种方法是使用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);
}