我正在编写一个 Java 程序,可以对图像执行一些操作。
现在我需要将图像向左移动n 个像素
。我可以使用 Graphics.setClip(Shape) 函数将图像剪辑为形状。但我无法将其移动到左对齐。
[编辑]抱歉,上述问题缺乏信息。
我有一个图像,并将其绘制在 Canvas 上,如下所示:
@Override
public void paint(Graphics g){
g.drawImage(image, 0, 0, this);
}
我需要将图像移动到 Canvas 上的左侧 n 个像素
(这样我就可以在移动后在右侧的位置绘制新的内容)。
这是一个例子。图一是原图,图二是平移后的图。 请告诉我该怎么做。
谢谢大家!
最佳答案
一种方法是使用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("/image/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);
}
关于java - 如何将图像向左(或向右)移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133925/