【问题标题】:How to shift image to left (or right)?如何将图像向左(或向右)移动?
【发布时间】:2013-02-14 13:10:25
【问题描述】:

我正在编写一个处理图像的 Java 程序。

现在我需要将图像向左移动n pixels。我可以使用Graphics.setClip(Shape) 函数将图像裁剪为具有形状的图像。但我无法将其移动到左对齐。

[编辑] 抱歉上述问题的信息不足。

我有一张图片,然后像这样在画布上绘制它:

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

我需要在画布上将图像向左移动n pixels(这样移动后我可以在右侧的位置绘制新的东西)。

这是一个例子。图一是原图,图二是移位后的图。 请告诉我该怎么做。

谢谢大家!

【问题讨论】:

  • 如何绘制图像?使用 drawImage()?
  • 一行代码说一百多字……贴出你的代码。

标签: java image awt bufferedimage


【解决方案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);
}

【讨论】:

  • 如果它帮助您解决问题,请务必accept回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 2011-03-27
  • 1970-01-01
  • 2012-02-19
  • 2016-10-15
相关资源
最近更新 更多