Dies ist ein Einsteigerartikel, Experten überspringen ihn bitte.
In diesem Artikel erfahren Sie, wie Sie ein Bild in Java zuschneiden und die zugeschnittenen Teile separat in einer Datei speichern.
Wir werden durch die folgenden Schritte lernen:
1. Geben Sie das Bild ein und geben Sie den zu verarbeitenden Bildpfad an
2. Ermöglichen Sie Benutzern das Ziehen und Ablegen des zuzuschneidenden Teils
3. Verwenden Sie nach der Auswahl die Robot-Klasse, um die Koordinaten des ausgeschnittenen Teils zu bestimmen.
4. 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:
1. Die Graphics-Klasse enthält Methoden zum Zeichnen von Rechtecken
2. Wir verwenden die Klasse „Rechteck“ als gezogenen rechteckigen Bereich zum Ausschneiden
3. Die Roboterklasse wird zum Aufnehmen von Screenshots verwendet
4. Verwenden Sie einen Maus-Listener, um die Mausziehzeit zu ermitteln
5. Die Robot-Klasse verwendet BufferedImage für die Bildverarbeitung
6. Die Dateiklasse wird zum Öffnen von Bilddateien verwendet
7.Die ImageIO-Klasse wird zum Schreiben von Bildern in PNG- oder JPG-Bilddateien verwendet
8.JFrame wird zur Anzeige 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:
1. Eine Klasse namens CropImage geschrieben
2. Diese Klasse erweitert JFrame, um alle Funktionen von Frame zu implementieren
3. Verschiedene Mausereignis-Listener implementiert, um zu wissen, wann der Benutzer beginnt, den Mauszeiger zu ziehen
4. Die Variable „drag_status“ wird zum Speichern der Koordinaten verwendet, wenn die Maus mit dem Ziehen beginnt
5. Wir haben die Hauptmethode zum Aufrufen einer Startmethode definiert, 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:
1. Wir definieren eine Klasse namens ImagePanel und verwenden das zu verarbeitende Bild als Parameter
2. Platzieren Sie das ImagePanel, um das Bild im JFrame anzuzeigen, und beginnen Sie mit der Überwachung auf Mausereignisse.
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:
1. Wenn die Maus gedrückt wird, speichern Sie die aktuellen Koordinaten in c1 und c2
2. Setzen Sie die Drag-Statusvariable „drag_status“ auf „true“, wenn die Maus gedrückt wird und das Ziehen beginnt.
3. Wenn Sie die Maustaste loslassen, bedeutet dies, dass der Bildzuschneidebereich ausgewählt wurde und die Draggedscreen-Methode aufgerufen wird.
4. 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
Listing 4: DraggedScreen-Methode
Kopieren Sie den Codecode wie folgt:
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:
1. Berechnen Sie zunächst die Höhe und Breite des Bildes
2. 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
Listing 5: ImagePanel.java
Kopieren Sie den Codecode wie folgt:
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
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;
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);
}
}