`

用鼠标点击截取一张图片的某部分

阅读更多
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class DivImageByMouse extends JPanel{
BufferedImage image=null;
int x1,y1,x2,y2;
public  DivImageByMouse(File file){
  super();
  this.addMouseListener(new MouseAdapter(){
   public void mousePressed(MouseEvent e) {
    x1=e.getX();
    y1=e.getY();
   }
   public void mouseReleased(MouseEvent e) {
    x2=e.getX();
    y2=e.getY();
    int x=x1<x2?x1:x2;
    int y=y1<y2?y1:y2;
    int w=(x1>x2?x1:x2)-x;
    int h=(y1>y2?y1:y2)-y;
    Image image=DivImageByMouse.this.getImageByClip(x, y, w, h);
    setClipboardImage2(image);
    x1=y1=x2=y2=0;
    JOptionPane.showMessageDialog(DivImageByMouse.this,"图片已保存到系统粘贴板!","图片已保存",JOptionPane.INFORMATION_MESSAGE);
    DivImageByMouse.this.repaint();
   }
  });
  this.addMouseMotionListener(new MouseMotionAdapter(){
   public void mouseDragged(MouseEvent e) {
    x2=e.getX();
    y2=e.getY();
    DivImageByMouse.this.repaint();
   }
  });
  try {
   image=ImageIO.read(file);
  } catch (IOException e) {
   System.out.println("输入文件不是一个图片文件!");
  }
}
public Image getImage(){
  return image;
}
public Image getImageByClip(int x,int y,int w,int h){
  int rgbs[]=new int[w*h];
  rgbs=image.getRGB(x,y, w, h, rgbs,0,w);
  BufferedImage tmpImage=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
  tmpImage.setRGB(0, 0, w, h, rgbs,0,w);
  return tmpImage;
}
public void paint(Graphics g){
  super.paint(g);
  g.drawImage(image,0,0,this);
  System.out.println("("+x1+","+y1+")("+x2+","+y2+")");
  if(x1==0&&y1==0&&x2==0&&y2==0) return;
  System.out.println("rect");
  int x=x1<x2?x1:x2;
  int y=y1<y2?y1:y2;
  int w=(x1>x2?x1:x2)-x;
  int h=(y1>y2?y1:y2)-y;
  g.setColor(Color.blue);
  g.drawRect(x, y, w, h);
}
protected static void setClipboardImage2(final Image image) {
  Transferable trans = new Transferable(){
   public DataFlavor[] getTransferDataFlavors() {
    return new DataFlavor[] { DataFlavor.imageFlavor };
   }
   public boolean isDataFlavorSupported(DataFlavor flavor) {
    return DataFlavor.imageFlavor.equals(flavor);
   }
   public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
    if(isDataFlavorSupported(flavor))
    return image;
    throw new UnsupportedFlavorException(flavor);
   }
  };
  Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
}




public static void main(String args[]){
  JFrame jf=new JFrame("");
  jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
  jf.setBounds(50,50,1024,768);
  jf.add(new DivImageByMouse(new File("e:\109.jpg")));
  jf.add(new JButton(""),"North");
  jf.setVisible(true);
}
分享到:
评论

相关推荐

    c#截取一张图片的部分 或者缩放图片

    在C#编程中,处理图像是一项常见的任务,包括截取图片的部分区域以及对图片进行缩放。本篇文章将深入探讨这两个知识点,旨在帮助你理解如何使用C#来实现这些功能。 首先,我们要介绍的是如何截取图片的部分。这通常...

    js 截取图片代码(截取中间部分)

    js 截取图片代码

    截取图像的某一指定部分

    标题"截取图像的某一指定部分"和描述中提到的MATLAB语言代码,就是专门针对这一需求的。 在MATLAB中,我们可以使用`imcrop`函数来截取图像的指定部分。这个函数允许用户通过交互方式或者提供具体坐标来选择图像的...

    android框选图片中的一部分并截取

    在Android平台上,框选图片中的一部分并截取是一项常见的需求,比如在应用中实现自定义截图功能、编辑图片或者在图像处理中选择特定区域。这个功能涉及到多个Android SDK中的类和方法,包括图像处理、视图操作以及...

    mfc 显示图片,鼠标截取一部分会显示在另一个控件上

    在MFC(Microsoft Foundation Class)库中,显示图片并...以上就是如何在MFC应用中实现显示图片、鼠标截取以及将截取部分显示在另一个控件上的详细步骤。通过理解并实践这些代码,你可以为你的MFC项目增加类似的功能。

    安卓头像制作图片圆角剪裁相关-仿Android版qq的自定义头像截取功能可以随意截取图片的某部分作为头像.rar

    这个压缩包文件“仿Android版qq的自定义头像截取功能,可以随意截取图片的某部分作为头像.rar”提供了一个实现这一功能的示例。以下是关于这个主题的详细知识点: 1. 图片裁剪:Android提供了多种图片裁剪的方法。...

    运用opencv鼠标实时截取图像并显示坐标

    在vs2013上win32控制台运用opencv鼠标实时截取图像并显示坐标

    JS 按图片比例截取中间部分 缩略图不失真

    在JavaScript(JS)中,创建一个按比例截取图片中间部分并保持图片不失真的缩略图功能是一项常见的需求。这通常应用于图片预览、相册展示等场景,以提高用户体验和节省网页加载资源。以下是对这个主题的详细阐述: ...

    用鼠标画矩形截取图像(请帮忙调试)

    这个标题“用鼠标画矩形截取图像(请帮忙调试)”表明用户已经实现了一个功能,可以使用鼠标画出一个矩形区域来截取屏幕上的图像,但目前遇到了问题:截取的图像无法显示在新建的文档中。下面我们将详细讨论如何实现...

    图片切割,截取图片的某一份为头像功能(Asp.net C# 2.0)

    总结来说,"图片切割,截取图片的某一份为头像功能(Asp.net C# 2.0)"是一个结合了前端jQuery交互和后端Asp.net C#图片处理技术的项目,实现了用户自定义选择图片部分并生成头像的功能。它不仅展示了Web开发中的...

    截取鼠标指针的图片 获得鼠标位图

    在IT领域,截取鼠标指针的图片并获取鼠标位图是一种常见的需求,尤其是在软件开发、测试或教学中。这通常涉及到图形用户界面(GUI)编程,尤其是与Windows API(应用程序接口)打交道的部分。以下是对这个主题的详细...

    net C# 上传视频自动截取一张图片.rar

    在这个案例中,"net C# 上传视频自动截取一张图片.rar" 提供的是一个使用C#实现的功能,允许用户在上传视频后自动截取视频的第一帧作为图片。这涉及到ASP.NET(一种基于.NET Framework的服务器端Web应用开发技术)和...

    图片截取和图片服务器

    这里提到的可能是`jQueryCropper`或者`JQuery UI Draggable`等插件,它们允许用户通过鼠标操作在预览的图片上设定选取区域,从而实现截取效果。这些插件通常会提供API来获取用户选定的截图坐标和比例,为后续的图片...

    ios-截取图片指定部分.zip

    在iOS开发中,有时我们需要根据需求截取图片的指定部分,比如在制作拼图应用、截图分享或编辑功能时。这个“ios-截取图片指定部分.zip”文件可能包含了一个示例项目,用于演示如何在iOS应用中实现这一功能。下面我们...

    jquery图片截取DEMO

    在图片截取DEMO中,jQuery用于处理用户与图片的交互,如鼠标点击和拖动等。 2. **imgAreaSelect插件**:在"压缩包子文件的文件名称列表"中提到的`imgareaselect`,是一个jQuery插件,专门用于在图片上创建可选区域...

    labview截取屏幕位置、移动程序位置、控制鼠标点击位置代码

    在这个特定的场景中,我们将探讨如何使用LabVIEW结合.NET库来实现屏幕截取、移动程序窗口位置以及控制鼠标点击位置的功能。 首先,我们需要了解.NET库的作用。.NET框架提供了一组丰富的类库,允许开发者用各种语言...

    java用ffmpeg截取视频图片

    Java 使用 FFmpeg 截取视频图片是一个常见的任务,它涉及到多媒体处理、命令行操作和跨平台编程。FFmpeg 是一个强大的开源工具集,用于处理音频和视频文件,包括编码、解码、转码、流处理等功能。在 Java 中,我们...

    基于C++实现位图轮廓识别提取,图片转换为字符,鼠标擦图,图片扭曲,截取圆形图片,像素图片等操作项目源代码

    基于C++实现位图轮廓识别提取,图片转换为字符,鼠标擦图,图片扭曲,截取圆形图片,像素图片等操作项目源代码 介绍 位图轮廓识别提取,图片转换为字符,鼠标擦图,图片扭曲,截取圆形图片,像素图片等操作 软件架构...

    java后台利用ffmpeg实现将视频截取某一帧图片并保存

    在Java后台开发中,有时我们需要处理视频相关的任务,例如从视频中截取特定帧作为图片。这通常涉及到使用外部工具,比如FFmpeg,一个强大的开源跨平台多媒体处理库。本教程将详细介绍如何在Java环境中利用FFmpeg库...

    iOS uiimage部分截取图片

    在特定场景下,我们可能需要从一个UIImage对象中部分截取图片,例如创建可拉伸的按钮背景或者实现自定义的图片效果。"stretchableImageWithLeftCapWidth"和"resizableImageWithCapInsets"这两个方法是UIImage的重要...

Global site tag (gtag.js) - Google Analytics