java - 如何将图像向左(或向右)移动?

标签 java image awt bufferedimage

我正在编写一个 Java 程序,可以对图像执行一些操作。

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

[编辑]抱歉,上述问题缺乏信息。

我有一个图像,并将其绘制在 Canvas 上,如下所示:

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

我需要将图像移动到 Canvas 上的左侧 n 个像素(这样我就可以在移动后在右侧的位置绘制新的内容)。

image before shifting enter image description here

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

谢谢大家!

最佳答案

一种方法是使用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/

相关文章:

java - JTA 事务中的 Hibernate session 范围与 Open-Session-In-View

android - 在 android 的 ScrollView 中加载数百个位图图像时出现内存不足错误

java - 有没有办法将 tiff 图像转换为 Base64 而不将完整文件加载到内存中

java - 如果不建议使用挥杆组件后退技巧?

java - 具有用户输入的二维数组

java - 向 Servlet 发出 AJAX POST 请求失败

java - 哪种方法可以快速编译 Ginger Bread 源代码?

html - 如何在html中正确显示纵向模式的图像?

java - 实例化 Java AWT 对象会导致在 macOS 上打开空应用程序

Java awt 为什么我只能删除链表中最近添加的内容