java操作图片裁切与缩放 jcomponent,如何在Java中裁剪图像?

这是一个可行的方法:

import javax.image.BufferedImage; // I think import java.awt.Rectangle; import java.awt.Color; import java.awt.Graphics; public BufferedImage crop(BufferedImage src, Rectangle rect) { BufferedImage dest = new BufferedImage(rect.getWidth(), rect.getHeight(), BufferedImage.TYPE_ARGB_PRE); Graphics g = dest.getGraphics(); g.drawImage(src, 0, 0, rect.getWidth(), rect.getHeight(), rect.getX(), rect.getY(), rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight(), null); g.dispose(); return dest; }

当然,你必须制作你自己的JComponent:

import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.image.BufferedImage; import java.awt.Rectangle; import java.awt.Graphics; import javax.swing.JComponent; public class JImageCropComponent extends JComponent implements MouseListener, MouseMotionListener { private BufferedImage img; private int x1, y1, x2, y2; public JImageCropComponent(BufferedImage img) { this.img = img; this.addMouseListener(this); this.addMouseMotionListener(this); } public void setImage(BufferedImage img) { this.img = img; } public BufferedImage getImage() { return this; } @Override public void paintComponent(Graphics g) { g.drawImage(img, 0, 0, this); if (cropping) { // Paint the area we are going to crop. g.setColor(Color.RED); g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.max(x1, x2), Math.max(y1, y2)); } } @Override public void mousePressed(MouseEvent evt) { this.x1 = evt.getX(); this.y1 = evt.getY(); } @Override public void mouseReleased(MouseEvent evt) { this.cropping = false; // Now we crop the image; // This is the method a wrote in the other snipped BufferedImage cropped = crop(new Rectangle(Math.min(x1, x2), Math.min(y1, y2), Math.max(x1, x2), Math.max(y1, y2)); // Now you have the cropped image; // You have to choose what you want to do with it this.img = cropped; } @Override public void mouseDragged(MouseEvent evt) { cropping = true; this.x2 = evt.getX(); this.y2 = evt.getY(); } //TODO: Implement the other unused methods from Mouse(Motion)Listener }

我没有testing它。 也许有一些错误(我不知道所有的import)。

你可以把crop(img, rect)方法放在这个类中。 希望这可以帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Java Swing的滚动条可以使用自定义的标签来替代默认的滚动条。你使用JScrollBar类的setUI()方法来设置自定义的UI。 下面是一个简单的例子,演示如何使用自定义的图片标签来替默认的垂直滚动条: ```java import java.awt.*; import javax.swing.*; public class CustomScrollBarExample extends JFrame { public CustomScrollBarExample() { super("Custom Scroll Bar Example"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(200, 200)); panel.setLayout(new BorderLayout()); // 创建一个自定义的滚动条UI CustomScrollBarUI customScrollBarUI = new CustomScrollBarUI(); JScrollBar scrollBar = new JScrollBar(JScrollBar.VERTICAL); scrollBar.setUI(customScrollBarUI); panel.add(scrollBar, BorderLayout.EAST); getContentPane().add(panel); } public static void main(String[] args) { CustomScrollBarExample example = new CustomScrollBarExample(); example.setVisible(true); } } // 自定义的滚动条UI class CustomScrollBarUI extends BasicScrollBarUI { // 滚动条的宽度 private static final int SCROLLBAR_WIDTH = 20; // 滚动条的高度 private static final int SCROLLBAR_HEIGHT = 200; // 滚动条的背景颜色 private static final Color SCROLLBAR_BACKGROUND = new Color(255, 255, 255); // 滑块的图片 private static final ImageIcon THUMB_IMAGE = new ImageIcon("thumb.png"); // 增加按钮的图片 private static final ImageIcon INCREASE_BUTTON_IMAGE = new ImageIcon("increase.png"); // 减少按钮的图片 private static final ImageIcon DECREASE_BUTTON_IMAGE = new ImageIcon("decrease.png"); @Override protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) { g.setColor(SCROLLBAR_BACKGROUND); g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height); } @Override protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) { THUMB_IMAGE.paintIcon(c, g, thumbBounds.x, thumbBounds.y); } @Override protected void paintDecreaseHighlight(Graphics g) { DECREASE_BUTTON_IMAGE.paintIcon(scrollbar, g, decreaseRect.x, decreaseRect.y); } @Override protected void paintIncreaseHighlight(Graphics g) { INCREASE_BUTTON_IMAGE.paintIcon(scrollbar, g, increaseRect.x, increaseRect.y); } @Override protected JButton createDecreaseButton(int orientation) { return new JButton(DECREASE_BUTTON_IMAGE); } @Override protected JButton createIncreaseButton(int orientation) { return new JButton(INCREASE_BUTTON_IMAGE); } @Override protected Dimension getMinimumThumbSize() { return new Dimension(THUMB_IMAGE.getIconWidth(), THUMB_IMAGE.getIconHeight()); } @Override protected Dimension getPreferredSize(JComponent c) { if (scrollbar.getOrientation() == JScrollBar.VERTICAL) { return new Dimension(SCROLLBAR_WIDTH, SCROLLBAR_HEIGHT); } else { return new Dimension(SCROLLBAR_HEIGHT, SCROLLBAR_WIDTH); } } } ``` 在上面的例子,我们创建了一个CustomScrollBarUI类来实现自定义的滚动条UI。在这个类,我们重写了几个方法来实现自定义的滚动条: - paintTrack()方法用来绘制滚动条的背景颜色。 - paintThumb()方法用来绘制滑块的图片。 - paintDecreaseHighlight()和paintIncreaseHighlight()方法用来绘制减少和增加按钮的图片。 - createDecreaseButton()和createIncreaseButton()方法用来创建减少和增加按钮。 - getMinimumThumbSize()方法用来设置滑块的最小大小。 - getPreferredSize()方法用来设置滚动条的首选大小。 在界面,我们创建了一个JPanel,并将自定义的垂直滚动条添加到了它的东侧。最后,我们将这个面板添加到了JFrame,并显示出来。 注意,上述代码使用的图片必须存在于指定的路径。如果你想使用自己的图片,请将图片文件放在正确的路径下,并在代码修改图片文件的名称和路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值