เราจะเรียนรู้ตามขั้นตอนต่อไปนี้:
อินพุตรูปภาพ ระบุเส้นทางรูปภาพที่จะประมวลผล
อนุญาตให้ผู้ใช้ลากและวางส่วนที่จะครอบตัด
หลังจากเลือกแล้ว ให้ใช้คลาส Robot เพื่อกำหนดพิกัดของส่วนที่ถูกตัด
ครอบตัดรูปภาพที่เลือกและเก็บไว้
ต่อไปเราจะเริ่มส่วนการเข้ารหัส
List1: คลาสที่แนะนำ
คัดลอกรหัสรหัสดังต่อไปนี้:
นำเข้า java.awt.Graphics;
นำเข้า java.awt.Rectangle;
นำเข้า java.awt.Robot;
นำเข้า java.awt.event.MouseEvent;
นำเข้า java.awt.event.MouseListener;
นำเข้า java.awt.event.MouseMotionListener;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.io.File;
นำเข้า javax.imageio.ImageIO;
นำเข้า javax.swing.JFrame;
แสดงให้เห็น:
คลาส Graphics มีวิธีการวาดภาพสี่เหลี่ยม
เราใช้คลาสสี่เหลี่ยมผืนผ้าเป็นพื้นที่สี่เหลี่ยมที่ถูกลากสำหรับการตัด
คลาสหุ่นยนต์ใช้สำหรับจับภาพหน้าจอ
ใช้ตัวฟังเมาส์เพื่อจับเวลาการลากเมาส์
คลาส Robot ใช้ BufferedImage สำหรับการประมวลผลภาพ
คลาสไฟล์ใช้สำหรับเปิดไฟล์รูปภาพ
คลาส ImageIO ใช้สำหรับเขียนภาพไปยังไฟล์ภาพ PNG หรือ JPG
JFrame ใช้เพื่อแสดงอินเทอร์เฟซ
ตอนนี้เราเขียนคลาสรายการที่มีวิธีการหลัก
รายการ 2: ระดับเริ่มต้น
คัดลอกรหัสรหัสดังต่อไปนี้:
CropImage คลาสสาธารณะขยาย JFrame ใช้ MouseListener, MouseMotionListener
-
int Drag_status=0,c1,c2,c3,c4;
โมฆะคงสาธารณะ main (String args [])
-
ใหม่ CropImage().start();
-
แสดงให้เห็น:
เขียนคลาสชื่อ CropImage
คลาสนี้ขยาย JFrame เพื่อใช้งานฟังก์ชันทั้งหมดของเฟรม
ใช้ตัวฟังเหตุการณ์เมาส์ที่แตกต่างกันเพื่อทราบว่าเมื่อใดที่ผู้ใช้เริ่มลากตัวชี้เมาส์
ตัวแปร Drag_status ใช้เพื่อบันทึกพิกัดของเมาส์เมื่อเริ่มลาก
เรากำหนดวิธีการหลักในการเรียกวิธีการเริ่มต้น ซึ่งจะกำหนดไว้ด้านล่างนี้
ต่อไปเป็นวิธีการเริ่มต้น
รายการ 2
คัดลอกรหัสรหัสดังต่อไปนี้:
โมฆะสาธารณะเริ่มต้น ()
-
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
เพิ่ม(ฉัน);
กำหนดขนาด(400,400);
setVisible (จริง);
addMouseListener(นี่);
addMouseMotionListener( นี้ );
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) {
ทาสีใหม่();
ถ้า (drag_status==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)
-
ซุปเปอร์.สี(g);
int w = c1 - c3;
int ชั่วโมง = c2 - c4;
ว = ว * -1;
ชั่วโมง = ชั่วโมง * -1;
ถ้า(w<0)
ว = ว * -1;
g.drawRect(c1, c2, w, h);
-
แสดงให้เห็น:
เก็บพิกัดปัจจุบันไว้ที่ c1 และ c2 เมื่อกดเมาส์
ตั้งค่าตัวแปรสถานะการลาก Drag_status ให้เป็นจริงเมื่อกดเมาส์และเริ่มการลาก
เมื่อปล่อยปุ่มเมาส์ หมายความว่าได้เลือกพื้นที่ครอบตัดรูปภาพแล้ว และเรียกใช้วิธีการลากหน้าจอ
วิธีการทาสีใช้เพื่อแสดงสี่เหลี่ยมเมื่อลาก และวาดรูปสี่เหลี่ยมผ่านพิกัดปัจจุบันและพิกัดที่บันทึกไว้ในตอนแรก
ด้านล่างนี้เป็นโค้ดสำหรับวิธีการลากหน้าจอ
คัดลอกรหัสรหัสดังต่อไปนี้:
รายการ 4: วิธีการลากหน้าจอ
โมฆะสาธารณะลากหน้าจอ () พ่นข้อยกเว้น
-
int w = c1 - c3;
int ชั่วโมง = c2 - c4;
ว = ว * -1;
ชั่วโมง = ชั่วโมง * -1;
หุ่นยนต์ หุ่นยนต์ = หุ่นยนต์ใหม่();
BufferedImage img = robot.createScreenCapture(สี่เหลี่ยมผืนผ้าใหม่(c1, c2,w,h));
ไฟล์ save_path=ไฟล์ใหม่ ("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("บันทึกภาพที่ครอบตัดเรียบร้อยแล้ว");
-
แสดงให้เห็น:
ขั้นแรกให้คำนวณความสูงและความกว้างของรูปภาพ
ใช้คลาส Robot เพื่อจับภาพหน้าจอของพื้นที่ครอบตัดและบันทึกลงในไฟล์อื่น screen1.jpg
รหัสที่สมบูรณ์
คัดลอกรหัสรหัสดังต่อไปนี้:
รายการ 5: ImagePanel.java
นำเข้า java.awt.Dimension;
นำเข้า java.awt.Graphics;
นำเข้า java.awt.Image;
นำเข้า javax.swing.ImageIcon;
นำเข้า javax.swing.JPanel;
คลาส ImagePanel ขยาย JPanel {
รูปภาพส่วนตัว img;
ImagePanel สาธารณะ (สตริง img) {
นี้ (ImageIcon ใหม่ (img).getImage());
-
ImagePanel สาธารณะ (รูปภาพ img) {
this.img = img;
ขนาดมิติ = มิติใหม่ (img.getWidth(null), img.getHeight(null));
// ขนาดขนาด = มิติใหม่ (10,10);
setPreferredSize(ขนาด);
setMinimumSize (ขนาด);
setMaximumSize(ขนาด);
กำหนดขนาด(ขนาด);
setLayout(โมฆะ);
-
โมฆะสาธารณะ paintComponent (กราฟิก g) {
g.drawImage(img, 0, 0, null);
-
-
รายการ 6:CropImage.java
นำเข้า java.awt.Graphics;
นำเข้า java.awt.Rectangle;
นำเข้า java.awt.Robot;
นำเข้า java.awt.event.MouseEvent;
นำเข้า java.awt.event.MouseListener;
นำเข้า java.awt.event.MouseMotionListener;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.io.File;
นำเข้า javax.imageio.ImageIO;
นำเข้า javax.swing.JFrame;
CropImage คลาสสาธารณะขยาย JFrame ใช้ MouseListener, MouseMotionListener
-
int Drag_status=0,c1,c2,c3,c4;
โมฆะคงสาธารณะ main (String args [])
-
ใหม่ CropImage().start();
-
โมฆะสาธารณะเริ่มต้น ()
-
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
เพิ่ม(ฉัน);
กำหนดขนาด(400,400);
setVisible (จริง);
addMouseListener(นี่);
addMouseMotionListener( นี้ );
setDefaultCloseOperation(EXIT_ON_CLOSE);
-
โมฆะสาธารณะลากหน้าจอ () พ่นข้อยกเว้น
-
int w = c1 - c3;
int ชั่วโมง = c2 - c4;
ว = ว * -1;
ชั่วโมง = ชั่วโมง * -1;
หุ่นยนต์ หุ่นยนต์ = หุ่นยนต์ใหม่();
BufferedImage img = robot.createScreenCapture(สี่เหลี่ยมผืนผ้าใหม่(c1, c2,w,h));
ไฟล์ save_path=ไฟล์ใหม่ ("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) {
ทาสีใหม่();
ถ้า (drag_status==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)
-
ซุปเปอร์.สี(g);
int w = c1 - c3;
int ชั่วโมง = c2 - c4;
ว = ว * -1;
ชั่วโมง = ชั่วโมง * -1;
ถ้า(w<0)
ว = ว * -1;
g.drawRect(c1, c2, w, h);
-
-