سنتعلم من خلال الخطوات التالية:
صورة الإدخال، حدد مسار الصورة المراد معالجتها
السماح للمستخدم بسحب وإفلات الجزء المراد اقتصاصه
بعد التحديد، استخدم فئة Robot لتحديد إحداثيات الجزء المقطوع.
قص الصورة المحددة والاحتفاظ بها
بعد ذلك نبدأ الجزء الترميز.
القائمة 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;
يوضح:
تحتوي فئة الرسومات على طرق لرسم المستطيلات
نحن نستخدم فئة المستطيل كمنطقة مستطيلة مسحوبة للتقطيع
يتم استخدام فئة الروبوت لالتقاط لقطات الشاشة
استخدم مستمع الماوس للحصول على وقت سحب الماوس
تستخدم فئة Robot BufferedImage لمعالجة الصور
يتم استخدام فئة الملف لفتح ملفات الصور
تُستخدم فئة ImageIO لكتابة الصور إلى ملفات صور png أو jpg
يتم استخدام JFrame لعرض الواجهة
الآن نكتب فئة الإدخال التي تحتوي على الطريقة الرئيسية
القائمة 2: فئة الدخول
انسخ رمز الكود كما يلي:
الطبقة العامة CropImage تمتد JFrame وتنفذ MouseListener وMouseMotionListener
{
int Drag_status=0,c1,c2,c3,c4;
الفراغ العام الثابت الرئيسي (سلسلة الحجج [])
{
جديد CropImage().start();
}
يوضح:
كتب فئة تسمى CropImage
تعمل هذه الفئة على توسيع JFrame لتنفيذ جميع وظائف الإطار
تم تنفيذ مستمعين مختلفين لحدث الماوس لمعرفة متى يبدأ المستخدم في سحب مؤشر الماوس
يتم استخدام المتغير Drag_status لحفظ إحداثيات الماوس عندما يبدأ السحب
نحدد الطريقة الرئيسية لاستدعاء طريقة البداية، والتي سيتم تعريفها أدناه
التالي هو طريقة البداية
القائمة 2
انسخ رمز الكود كما يلي:
بداية الفراغ العام ()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
إضافة (ايم)؛
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
يوضح:
نحدد فئة تسمى ImagePanel، باستخدام الصورة المراد معالجتها كمعلمة
ضع 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);
}
يوضح:
قم بتخزين الإحداثيات الحالية إلى c1 وc2 عند الضغط على الماوس
قم بتعيين متغير حالة السحب Drag_status على القيمة true عند الضغط على الماوس وبدء السحب.
عندما يتم تحرير زر الماوس، فهذا يعني أنه تم تحديد منطقة اقتصاص الصورة واستدعاء طريقة السحب على الشاشة.
يتم استخدام طريقة الطلاء لعرض المستطيل عند السحب، ورسم المستطيل من خلال الإحداثيات الحالية والإحداثيات المسجلة في البداية.
يوجد أدناه رمز طريقة السحب على الشاشة
انسخ رمز الكود كما يلي:
القائمة 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("تم حفظ الصورة التي تم اقتصاصها بنجاح.");
}}
يوضح:
قم أولاً بحساب ارتفاع وعرض الصورة
استخدم فئة 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);
}
}