هذه مقالة للمبتدئين، يرجى من الخبراء تخطيها.
سنتعلم في هذه المقالة كيفية اقتصاص صورة في Java وحفظ الأجزاء التي تم اقتصاصها بشكل منفصل في ملف.
سنتعلم من خلال الخطوات التالية:
1. أدخل الصورة وحدد مسار الصورة المراد معالجتها
2. السماح للمستخدمين بسحب وإفلات الجزء المراد اقتصاصه
3. بعد التحديد، استخدم فئة Robot لتحديد إحداثيات الجزء المقطوع.
4. قص الصورة المحددة والاحتفاظ بها
بعد ذلك نبدأ الجزء الترميز.
القائمة 1: الفئات المقدمة
انسخ رمز الكود كما يلي:
استيراد java.awt.Graphics؛
import java.awt.Rectangle;
استيراد 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.File؛
import javax.imageio.ImageIO;
import javax.swing.JFrame;
يوضح:
1. تحتوي فئة الرسومات على طرق لرسم المستطيلات
2. نستخدم فئة المستطيل كمنطقة مستطيلة مسحوبة للتقطيع
3. يتم استخدام فئة الروبوت لالتقاط لقطات الشاشة
4. استخدم مستمع الماوس للحصول على وقت سحب الماوس
5. تستخدم فئة الروبوت BufferedImage لمعالجة الصور
يتم استخدام فئة 6.File لفتح ملفات الصور
7.يتم استخدام فئة ImageIO لكتابة الصور إلى ملفات صور png أو jpg
8. يتم استخدام JFrame لعرض الواجهة
الآن نكتب فئة الإدخال التي تحتوي على الطريقة الرئيسية
القائمة 2: فئة الدخول
انسخ رمز الكود كما يلي:
الطبقة العامة CropImage تمتد JFrame وتنفذ MouseListener وMouseMotionListener
{
int Drag_status=0,c1,c2,c3,c4;
الفراغ العام الثابت الرئيسي (سلسلة الحجج [])
{
جديد CropImage().start();
}
يوضح:
1. قم بكتابة فصل دراسي اسمه CropImage
2. تعمل هذه الفئة على توسيع JFrame لتنفيذ جميع وظائف الإطار
3. تم تنفيذ مستمعين مختلفين لحدث الماوس لمعرفة متى يبدأ المستخدم في سحب مؤشر الماوس
4.drag_status يستخدم المتغير لحفظ الإحداثيات عندما يبدأ السحب بالماوس
5. لقد حددنا الطريقة الرئيسية لاستدعاء طريقة البدء، والتي سيتم تعريفها أدناه
التالي هو طريقة البداية
القائمة 2
انسخ رمز الكود كما يلي:
بداية الفراغ العام ()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
إضافة (ايم)؛
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
يوضح:
1. نحدد فئة تسمى ImagePanel، باستخدام الصورة المراد معالجتها كمعلمة
2. ضع ImagePanel لعرض الصورة في JFrame وابدأ في الاستماع لأحداث الماوس.
بعد ذلك نحدد طرق التعامل مع أحداث الماوس
القائمة 3: معالج حدث الماوس
انسخ رمز الكود كما يلي:
@تجاوز
الماوس العام الفارغ (MouseEvent arg0) {
}
@تجاوز
تم إدخال الماوس الفراغي العام (MouseEvent arg0) {
}
@تجاوز
الماوس العام الفارغ (MouseEvent arg0) {
}
@تجاوز
public void mousePressed(MouseEvent arg0) {
إعادة رسم();
c1=arg0.getX();
c2=arg0.getY();
}
@تجاوز
الماوس الفراغ العام (MouseEvent arg0) {
إعادة رسم();
إذا (حالة السحب ==1)
{
c3=arg0.getX();
c4=arg0.getY();
يحاول
{
DraggedScreen();
}
قبض (استثناء ه)
{
printStackTrace();
}
}
}
@تجاوز
الماوس العام الفارغ (MouseEvent arg0) {
إعادة رسم();
Drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@تجاوز
public void mouseMoved(MouseEvent arg0) {
}
طلاء الفراغ العام (الرسومات ز)
{
super.paint(g);
كثافة العمليات ث = c1 - c3؛
كثافة العمليات ح = c2 - c4؛
ث = ث * -1؛
ح = ح * -1؛
إذا (ث<0)
ث = ث * -1؛
g.drawRect(c1, c2, w, h);
}
يوضح:
1. عند الضغط على الماوس، قم بتخزين الإحداثيات الحالية في c1 وc2
2. اضبط متغير حالة السحب Drag_status على القيمة true عند الضغط على الماوس وبدء السحب.
3. عند تحرير زر الماوس، فهذا يعني أنه تم تحديد منطقة اقتصاص الصورة، ويتم استدعاء طريقة السحب على الشاشة.
4. يتم استخدام طريقة الرسم لعرض المستطيل عند السحب، ورسم المستطيل من خلال الإحداثيات الحالية والإحداثيات المسجلة في البداية.
يوجد أدناه رمز طريقة السحب على الشاشة
القائمة 4: طريقة السحب على الشاشة
انسخ رمز الكود كما يلي:
الفراغ العام الذي تم سحبه على الشاشة () يلقي استثناءً
{
كثافة العمليات ث = c1 - c3؛
كثافة العمليات ح = c2 - c4؛
ث = ث * -1؛
ح = ح * -1؛
روبوت روبوت = روبوت جديد ()؛
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
ملف save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("تم حفظ الصورة التي تم اقتصاصها بنجاح.");
}}
يوضح:
1. قم أولاً بحساب ارتفاع الصورة وعرضها
2. استخدم فئة Robot لالتقاط لقطة شاشة للمنطقة التي تم اقتصاصها وحفظها في ملف آخر screen1.jpg
رمز كامل
القائمة 5: ImagePanel.java
انسخ رمز الكود كما يلي:
import java.awt.Dimension;
استيراد java.awt.Graphics؛
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
فئة ImagePanel تمتد JPanel {
صورة خاصة img؛
صورة عامة (سلسلة img) {
this(new ImageIcon(img).getImage());
}
صورة عامة (صورة img) {
this.img = img;
حجم البعد = البعد الجديد(img.getWidth(null), img.getHeight(null));
// حجم البعد = البعد الجديد (10،10)؛
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
طلاء الفراغ العام (الرسومات ز) {
g.drawImage(img, 0, 0, null);
}
}
القائمة 6:CropImage.java
انسخ رمز الكود كما يلي:
استيراد java.awt.Graphics؛
import java.awt.Rectangle;
استيراد 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.File؛
import 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");
إضافة (ايم)؛
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
الفراغ العام الذي تم سحبه على الشاشة () يلقي استثناءً
{
كثافة العمليات ث = c1 - c3؛
كثافة العمليات ح = c2 - c4؛
ث = ث * -1؛
ح = ح * -1؛
روبوت روبوت = روبوت جديد ()؛
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
ملف save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("تم حفظ الصورة التي تم اقتصاصها بنجاح.");
}
@تجاوز
الماوس العام الفارغ (MouseEvent arg0) {
}
@تجاوز
تم إدخال الماوس الفراغي العام (MouseEvent arg0) {
}
@تجاوز
الماوس العام الفارغ (MouseEvent arg0) {
}
@تجاوز
public void mousePressed(MouseEvent arg0) {
إعادة رسم();
c1=arg0.getX();
c2=arg0.getY();
}
@تجاوز
الماوس الفراغ العام (MouseEvent arg0) {
إعادة رسم();
إذا (حالة السحب ==1)
{
c3=arg0.getX();
c4=arg0.getY();
يحاول
{
DraggedScreen();
}
قبض (استثناء ه)
{
printStackTrace();
}
}
}
@تجاوز
الماوس العام الفارغ (MouseEvent arg0) {
إعادة رسم();
Drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@تجاوز
public void mouseMoved(MouseEvent arg0) {
}
طلاء الفراغ العام (الرسومات ز)
{
super.paint(g);
كثافة العمليات ث = c1 - c3؛
كثافة العمليات ح = c2 - c4؛
ث = ث * -1؛
ح = ح * -1؛
إذا (ث<0)
ث = ث * -1؛
g.drawRect(c1, c2, w, h);
}
}