Kita akan belajar melalui langkah-langkah berikut:
Input gambar, tentukan jalur gambar yang akan diproses
Izinkan pengguna untuk menarik dan melepas bagian yang akan dipotong
Setelah seleksi, gunakan kelas Robot untuk menentukan koordinat bagian yang terpotong.
Pangkas gambar yang dipilih dan simpan
Selanjutnya kita memulai bagian coding.
Listing1: kelas yang diperkenalkan
Copy kode kodenya sebagai berikut:
impor java.awt.Graphics;
import java.awt.Rectangle;
impor java.awt.Robot;
impor java.awt.event.MouseEvent;
impor java.awt.event.MouseListener;
impor java.awt.event.MouseMotionListener;
impor java.awt.image.BufferedImage;
impor java.io.File;
impor javax.imageio.ImageIO;
impor javax.swing.JFrame;
menjelaskan:
Kelas Graphics berisi metode untuk menggambar persegi panjang
Kami menggunakan kelas Rectangle sebagai area persegi panjang yang diseret untuk dipotong
Kelas robot digunakan untuk menangkap tangkapan layar
Gunakan pendengar mouse untuk mengetahui waktu seret mouse
Kelas Robot menggunakan BufferedImage untuk pemrosesan gambar
Kelas file digunakan untuk membuka file gambar
Kelas ImageIO digunakan untuk menulis gambar ke file gambar png atau jpg
JFrame digunakan untuk menampilkan antarmuka
Sekarang kita menulis kelas entri yang berisi metode utama
Listing2: Kelas masuk
Copy kode kodenya sebagai berikut:
kelas publik CropImage memperluas implementasi JFrame MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{
CropImage baru().start();
}
menjelaskan:
Menulis kelas bernama CropImage
Kelas ini memperluas JFrame untuk mengimplementasikan semua fungsi frame
Menerapkan pendengar peristiwa mouse yang berbeda untuk mengetahui kapan pengguna mulai menyeret penunjuk tetikus
Variabel drag_status digunakan untuk menyimpan koordinat mouse saat mulai menyeret
Kami mendefinisikan metode utama untuk memanggil metode awal, yang akan didefinisikan di bawah
Berikutnya adalah metode awal
Daftar 2
Copy kode kodenya sebagai berikut:
kekosongan publik mulai()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
tambahkan(saya);
setUkuran(400,400);
setVisible(benar);
addMouseListener(ini);
addMouseMotionListener( ini );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
menjelaskan:
Kami mendefinisikan kelas bernama ImagePanel, menggunakan gambar yang akan diproses sebagai parameter
Tempatkan ImagePanel untuk menampilkan gambar di JFrame dan mulai mendengarkan kejadian mouse
Selanjutnya kita mendefinisikan metode untuk menangani kejadian mouse
Listing 3: Pengendali acara mouse
Copy kode kodenya sebagai berikut:
@Mengesampingkan
public void mouseClicked(MouseEvent arg0) {
}
@Mengesampingkan
public void mouseEntered(MouseEvent arg0) {
}
@Mengesampingkan
public void mouseExited(MouseEvent arg0) {
}
@Mengesampingkan
public void mousePressed(MouseEvent arg0) {
mengecat ulang();
c1=arg0.getX();
c2=arg0.getY();
}
@Mengesampingkan
public void mouseReleased(MouseEvent arg0) {
mengecat ulang();
jika(seret_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
mencoba
{
diseretLayar();
}
menangkap (Pengecualian e)
{
e.printStackTrace();
}
}
}
@Mengesampingkan
public void mouseDragged(MouseEvent arg0) {
mengecat ulang();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Mengesampingkan
public void mouseMoved(MouseEvent arg0) {
}
cat void publik (Gambar g)
{
super.cat(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
jam = jam * -1;
jika(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
menjelaskan:
Simpan koordinat saat ini ke c1 dan c2 saat mouse ditekan
Atur variabel status drag drag_status ke true ketika mouse ditekan dan drag dimulai.
Ketika tombol mouse dilepaskan, berarti area pemotongan gambar telah dipilih dan metode dragscreen dipanggil.
Metode cat digunakan untuk menampilkan persegi panjang saat menyeret, dan menggambar persegi panjang melalui koordinat saat ini dan koordinat yang direkam pada awalnya.
Di bawah ini adalah kode untuk metode dragscreen
Copy kode kodenya sebagai berikut:
Daftar 4: metode dragScreen
public void dragScreen()melemparkan Pengecualian
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
jam = jam * -1;
Robot robot = Robot baru();
BufferedImage img = robot.createScreenCapture(Persegi Panjang baru(c1, c2,w,h));
File save_path=File baru("screen1.jpg");
ImageIO.write(img, "JPG", simpan_path);
System.out.println("Gambar berhasil disimpan.");
}}
menjelaskan:
Hitung dulu tinggi dan lebar gambarnya
Gunakan kelas Robot untuk mengambil tangkapan layar dari area yang dipotong dan menyimpannya ke file lain screen1.jpg
kode lengkap
Copy kode kodenya sebagai berikut:
Daftar 5: ImagePanel.java
import java.awt.Dimensi;
impor java.awt.Grafik;
impor java.awt.Gambar;
impor javax.swing.ImageIcon;
impor javax.swing.JPanel;
kelas ImagePanel memperluas JPanel {
gambar pribadi img;
Panel Gambar publik(String img) {
ini(Ikon Gambar baru(img).getImage());
}
ImagePanel publik(Gambar img) {
ini.img = img;
Ukuran dimensi = Dimensi baru(img.getWidth(null), img.getHeight(null));
// Ukuran dimensi = Dimensi baru(10,10);
setPreferredSize(ukuran);
setUkuranMinimum(ukuran);
setUkuran Maksimum(ukuran);
setUkuran(ukuran);
setLayout(null);
}
public void paintComponent(Grafik g) {
g.drawImage(img, 0, 0, nol);
}
}
Daftar 6:CropImage.java
impor java.awt.Grafik;
import java.awt.Rectangle;
impor java.awt.Robot;
impor java.awt.event.MouseEvent;
impor java.awt.event.MouseListener;
impor java.awt.event.MouseMotionListener;
impor java.awt.image.BufferedImage;
impor java.io.File;
impor javax.imageio.ImageIO;
impor javax.swing.JFrame;
kelas publik CropImage memperluas implementasi JFrame MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{
CropImage baru().start();
}
kekosongan publik mulai()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
tambahkan(saya);
setUkuran(400,400);
setVisible(benar);
addMouseListener(ini);
addMouseMotionListener( ini );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void dragScreen()melemparkan Pengecualian
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
jam = jam * -1;
Robot robot = Robot baru();
BufferedImage img = robot.createScreenCapture(Persegi Panjang baru(c1, c2,w,h));
File save_path=File baru("screen1.jpg");
ImageIO.write(img, "JPG", simpan_path);
System.out.println("Gambar berhasil disimpan.");
}
@Mengesampingkan
public void mouseClicked(MouseEvent arg0) {
}
@Mengesampingkan
public void mouseEntered(MouseEvent arg0) {
}
@Mengesampingkan
public void mouseExited(MouseEvent arg0) {
}
@Mengesampingkan
public void mousePressed(MouseEvent arg0) {
mengecat ulang();
c1=arg0.getX();
c2=arg0.getY();
}
@Mengesampingkan
public void mouseReleased(MouseEvent arg0) {
mengecat ulang();
jika(seret_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
mencoba
{
diseretLayar();
}
menangkap (Pengecualian e)
{
e.printStackTrace();
}
}
}
@Mengesampingkan
public void mouseDragged(MouseEvent arg0) {
mengecat ulang();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Mengesampingkan
public void mouseMoved(MouseEvent arg0) {
}
cat void publik (Gambar g)
{
super.cat(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
jam = jam * -1;
jika(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}