Wir werden durch die folgenden Schritte lernen:
Geben Sie das Bild ein und geben Sie den zu verarbeitenden Bildpfad an
Ermöglichen Sie dem Benutzer, den zuzuschneidenden Teil per Drag-and-Drop zu ziehen
Verwenden Sie nach der Auswahl die Robot-Klasse, um die Koordinaten des ausgeschnittenen Teils zu bestimmen.
Ausgewähltes Bild zuschneiden und behalten
Als nächstes beginnen wir mit dem Codierungsteil.
Listing1: eingeführte Klassen
Kopieren Sie den Codecode wie folgt:
import java.awt.Graphics;
import java.awt.Rectangle;
java.awt.Robot importieren;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
java.io.File importieren;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
veranschaulichen:
Die Graphics-Klasse enthält Methoden zum Zeichnen von Rechtecken
Wir verwenden die Klasse „Rechteck“ als gezogenen rechteckigen Bereich zum Ausschneiden
Die Roboterklasse wird zum Aufnehmen von Screenshots verwendet
Verwenden Sie den Maus-Listener, um die Ziehzeit der Maus zu ermitteln
Die Robot-Klasse verwendet BufferedImage für die Bildverarbeitung
Die Dateiklasse wird zum Öffnen von Bilddateien verwendet
Die ImageIO-Klasse wird zum Schreiben von Bildern in PNG- oder JPG-Bilddateien verwendet
JFrame wird zur Darstellung der Schnittstelle verwendet
Jetzt schreiben wir die Einstiegsklasse, die die Hauptmethode enthält
Listing2: Einstiegsklasse
Kopieren Sie den Codecode wie folgt:
Die öffentliche Klasse CropImage erweitert JFrame und implementiert MouseListener und MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{
new CropImage().start();
}
veranschaulichen:
Habe eine Klasse namens CropImage geschrieben
Diese Klasse erweitert JFrame, um alle Funktionen von Frame zu implementieren
Verschiedene Mausereignis-Listener wurden implementiert, um zu wissen, wann der Benutzer beginnt, den Mauszeiger zu ziehen
Die Variable „drag_status“ wird verwendet, um die Koordinaten der Maus zu speichern, wenn sie mit dem Ziehen beginnt
Wir definieren die Hauptmethode zum Aufrufen einer Startmethode, die unten definiert wird
Als nächstes folgt die Startmethode
Auflistung 2
Kopieren Sie den Codecode wie folgt:
public void start()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
add(im);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
veranschaulichen:
Wir definieren eine Klasse namens ImagePanel und verwenden das zu verarbeitende Bild als Parameter
Platzieren Sie das ImagePanel, um das Bild im JFrame anzuzeigen und auf Mausereignisse zu warten
Als nächstes definieren wir Methoden zur Behandlung von Mausereignissen
Listing 3: Maus-Ereignishandler
Kopieren Sie den Codecode wie folgt:
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
neu streichen();
c1=arg0.getX();
c2=arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
neu streichen();
if(drag_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
versuchen
{
DraggedScreen();
}
Catch (Ausnahme e)
{
e.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent arg0) {
neu streichen();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
Farbe für öffentliche Räume (Grafik g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
veranschaulichen:
Speichern Sie die aktuellen Koordinaten in c1 und c2, wenn die Maus gedrückt wird
Setzen Sie die Drag-Statusvariable „drag_status“ auf „true“, wenn die Maus gedrückt wird und das Ziehen beginnt.
Wenn die Maustaste losgelassen wird, bedeutet dies, dass der Bildzuschneidebereich ausgewählt wurde und die Draggedscreen-Methode aufgerufen wird.
Die Malmethode wird zum Anzeigen des Rechtecks beim Ziehen verwendet und zeichnet das Rechteck durch die aktuellen Koordinaten und die ursprünglich aufgezeichneten Koordinaten.
Unten finden Sie den Code für die Draggedscreen-Methode
Kopieren Sie den Codecode wie folgt:
Listing 4: DraggedScreen-Methode
public void DraggedScreen() löst eine Ausnahme aus
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
Roboter robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rechteck(c1, c2,w,h));
Datei save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Zugeschnittenes Bild erfolgreich gespeichert.");
}}
veranschaulichen:
Berechnen Sie zunächst die Höhe und Breite des Bildes
Verwenden Sie die Robot-Klasse, um einen Screenshot des zugeschnittenen Bereichs zu erstellen und ihn in einer anderen Datei screen1.jpg zu speichern
vollständiger Code
Kopieren Sie den Codecode wie folgt:
Listing 5: ImagePanel.java
import java.awt.Dimension;
import java.awt.Graphics;
java.awt.Image importieren;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
Klasse ImagePanel erweitert JPanel {
privates Bild img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimensionsgröße = new Dimension(img.getWidth(null), img.getHeight(null));
// Dimensionsgröße = new Dimension(10,10);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
}
Listing 6:CropImage.java
import java.awt.Graphics;
import java.awt.Rectangle;
java.awt.Robot importieren;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
java.io.File importieren;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
Die öffentliche Klasse CropImage erweitert JFrame und implementiert MouseListener und MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{
new CropImage().start();
}
public void start()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
add(im);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void DraggedScreen() löst eine Ausnahme aus
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
Roboter robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rechteck(c1, c2,w,h));
Datei save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Zugeschnittenes Bild erfolgreich gespeichert.");
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
neu streichen();
c1=arg0.getX();
c2=arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
neu streichen();
if(drag_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
versuchen
{
DraggedScreen();
}
Catch (Ausnahme e)
{
e.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent arg0) {
neu streichen();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
Farbe für öffentliche Räume (Grafik g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}