우리는 다음 단계를 통해 배울 것입니다:
이미지 입력, 처리할 이미지 경로 지정
사용자가 잘라낼 부분을 끌어서 놓을 수 있도록 허용
선택 후 Robot 클래스를 사용하여 잘린 부분의 좌표를 결정합니다.
선택한 이미지를 자르고 유지
다음으로 코딩 부분을 시작합니다.
Listing1: 소개된 클래스
다음과 같이 코드 코드를 복사합니다.
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
javax.imageio.ImageIO 가져오기;
import javax.swing.JFrame;
설명하다:
Graphics 클래스에는 직사각형을 그리는 메서드가 포함되어 있습니다.
클리핑을 위해 드래그된 직사각형 영역으로 Rectangle 클래스를 사용합니다.
로봇 클래스는 스크린샷을 캡처하는 데 사용됩니다.
마우스 리스너를 사용하여 마우스 드래그 시간 얻기
Robot 클래스는 이미지 처리를 위해 BufferedImage를 사용합니다.
파일 클래스는 이미지 파일을 여는 데 사용됩니다.
ImageIO 클래스는 png 또는 jpg 이미지 파일에 이미지를 쓰는 데 사용됩니다.
JFrame은 인터페이스를 표시하는 데 사용됩니다.
이제 우리는 메인 메소드를 포함하는 엔트리 클래스를 작성합니다.
목록 2: 항목 클래스
다음과 같이 코드 코드를 복사합니다.
공개 클래스 CropImage는 JFrame을 확장하여 MouseListener, MouseMotionListener를 구현합니다.
{
int drag_status=0,c1,c2,c3,c4;
공개 정적 무효 메인(문자열 인수[])
{
새로운 CropImage().start();
}
설명하다:
CropImage라는 클래스를 작성했습니다.
이 클래스는 JFrame을 확장하여 프레임의 모든 기능을 구현합니다.
사용자가 마우스 포인터를 드래그하기 시작할 때를 알 수 있도록 다양한 마우스 이벤트 리스너를 구현했습니다.
drag_status 변수는 드래그가 시작될 때 마우스의 좌표를 저장하는 데 사용됩니다.
우리는 아래에 정의될 start 메소드를 호출하기 위한 메인 메소드를 정의합니다.
다음은 시작 방법입니다.
목록 2
다음과 같이 코드 코드를 복사합니다.
공개 무효 시작()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
추가(im);
setSize(400,400);
setVisible(참);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
설명하다:
매개변수로 처리할 이미지를 사용하여 ImagePanel이라는 클래스를 정의합니다.
ImagePanel을 배치하여 JFrame에 이미지를 표시하고 마우스 이벤트 수신을 시작합니다.
다음으로 마우스 이벤트를 처리하는 방법을 정의합니다.
목록 3: 마우스 이벤트 핸들러
다음과 같이 코드 코드를 복사합니다.
@보수
공공 무효 mouseClicked(MouseEvent arg0) {
}
@보수
공공 무효 mouseEntered(MouseEvent arg0) {
}
@보수
공공 무효 mouseExited(MouseEvent arg0) {
}
@보수
공공 무효 mousePressed(MouseEvent arg0) {
다시 칠하기();
c1=arg0.getX();
c2=arg0.getY();
}
@보수
공공 무효 mouseReleased(MouseEvent arg0) {
다시 칠하기();
if(드래그_상태==1)
{
c3=arg0.getX();
c4=arg0.getY();
노력하다
{
드래그스크린();
}
잡기(예외 e)
{
e.printStackTrace();
}
}
}
@보수
공공 무효 mouseDragged(MouseEvent arg0) {
다시 칠하기();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@보수
공공 무효 mouseMoved(MouseEvent arg0) {
}
공공 보이드 페인트(그래픽 g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
만약(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
설명하다:
마우스를 눌렀을 때 현재 좌표를 c1과 c2에 저장합니다.
마우스를 누르고 드래그가 시작되면 드래그 상태 변수 drag_status를 true로 설정합니다.
마우스 버튼을 놓으면 이미지 자르기 영역이 선택되고 draggedscreen 메서드가 호출된다는 의미입니다.
Paint 메소드는 드래그 시 직사각형을 표시하는 데 사용되며, 현재 좌표와 처음 기록된 좌표를 통해 직사각형을 그립니다.
다음은 draggedscreen 메소드에 대한 코드입니다.
다음과 같이 코드 코드를 복사합니다.
목록 4: draggedScreen 메서드
public void dragScreen()이 예외를 발생시킵니다.
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
로봇 로봇 = new Robot();
BufferedImage img = robots.createScreenCapture(new Rectangle(c1, c2,w,h));
파일 save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("잘린 이미지가 성공적으로 저장되었습니다.");
}}
설명하다:
먼저 이미지의 높이와 너비를 계산합니다.
Robot 클래스를 사용하여 잘린 영역의 스크린샷을 찍어 다른 파일 screen1.jpg에 저장합니다.
완전한 코드
다음과 같이 코드 코드를 복사합니다.
목록 5: ImagePanel.java
import java.awt.Dimension;
import java.awt.Graphics;
java.awt.Image 가져오기;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
ImagePanel 클래스는 JPanel을 확장합니다.
개인 이미지 img;
공개 ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
공개 ImagePanel(이미지 img) {
this.img = img;
치수 크기 = new Dimension(img.getWidth(null), img.getHeight(null));
// 차원 크기 = new Dimension(10,10);
setPreferredSize(크기);
setMinimumSize(크기);
setMaximumSize(크기);
setSize(크기);
setLayout(null);
}
공공 무효 페인트 구성 요소(그래픽 g) {
g.drawImage(img, 0, 0, null);
}
}
목록 6:CropImage.java
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
javax.imageio.ImageIO 가져오기;
import javax.swing.JFrame;
공개 클래스 CropImage는 JFrame을 확장하여 MouseListener, MouseMotionListener를 구현합니다.
{
int drag_status=0,c1,c2,c3,c4;
공개 정적 무효 메인(문자열 인수[])
{
새로운 CropImage().start();
}
공개 무효 시작()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
추가(im);
setSize(400,400);
setVisible(참);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void dragScreen()이 예외를 발생시킵니다.
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
로봇 로봇 = new Robot();
BufferedImage img = robots.createScreenCapture(new Rectangle(c1, c2,w,h));
파일 save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("잘린 이미지가 성공적으로 저장되었습니다.");
}
@보수
공공 무효 mouseClicked(MouseEvent arg0) {
}
@보수
공공 무효 mouseEntered(MouseEvent arg0) {
}
@보수
공공 무효 mouseExited(MouseEvent arg0) {
}
@보수
공공 무효 mousePressed(MouseEvent arg0) {
다시 칠하기();
c1=arg0.getX();
c2=arg0.getY();
}
@보수
공공 무효 mouseReleased(MouseEvent arg0) {
다시 칠하기();
if(드래그_상태==1)
{
c3=arg0.getX();
c4=arg0.getY();
노력하다
{
드래그스크린();
}
catch(예외e)
{
e.printStackTrace();
}
}
}
@보수
공공 무효 mouseDragged(MouseEvent arg0) {
다시 칠하기();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@보수
공공 무효 mouseMoved(MouseEvent arg0) {
}
공공 보이드 페인트(그래픽 g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
만약(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}