Мы научимся, выполнив следующие шаги:
Введите изображение, укажите путь к изображению для обработки.
Разрешить пользователю перетаскивать часть, которую нужно обрезать.
После выбора используйте класс Robot, чтобы определить координаты обрезанной части.
Обрезать выбранное изображение и сохранить
Далее мы приступаем к кодированию.
Листинг 1: представленные классы
Скопируйте код кода следующим образом:
импортировать java.awt.Graphics;
импортировать java.awt.Rectangle;
импортировать java.awt.Robot;
импортировать java.awt.event.MouseEvent;
импортировать java.awt.event.MouseListener;
импортировать java.awt.event.MouseMotionListener;
импортировать java.awt.image.BufferedImage;
импортировать java.io.File;
импортировать javax.imageio.ImageIO;
импортировать javax.swing.JFrame;
проиллюстрировать:
Класс Graphics содержит методы для рисования прямоугольников.
Мы используем класс Rectangle в качестве перетаскиваемой прямоугольной области для обрезки.
Класс робота используется для захвата снимков экрана.
Используйте прослушиватель мыши, чтобы получить время перетаскивания мышью
Класс Robot использует BufferedImage для обработки изображений.
Класс файла используется для открытия файлов изображений.
Класс ImageIO используется для записи изображений в файлы изображений png или jpg.
JFrame используется для отображения интерфейса
Теперь мы пишем входной класс, содержащий основной метод
Листинг 2: Начальный класс
Скопируйте код кода следующим образом:
общедоступный класс CropImage расширяет JFrame, реализует MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{
новый CropImage().start();
}
проиллюстрировать:
Написал класс CropImage.
Этот класс расширяет JFrame для реализации всех функций фрейма.
Реализованы различные прослушиватели событий мыши, чтобы узнать, когда пользователь начинает перетаскивать указатель мыши.
Переменная drag_status используется для сохранения координат мыши, когда она начинает перетаскивание.
Мы определяем основной метод для вызова метода запуска, который будет определен ниже.
Далее идет метод запуска
Листинг 2
Скопируйте код кода следующим образом:
публичное недействительное начало()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
добавить (им);
setSize(400,400);
setVisible (истина);
addMouseListener (это);
addMouseMotionListener (это);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
проиллюстрировать:
Мы определяем класс ImagePanel, используя изображение, подлежащее обработке, в качестве параметра.
Поместите ImagePanel для отображения изображения в JFrame и начните прослушивать события мыши.
Далее мы определяем методы для обработки событий мыши.
Листинг 3. Обработчик событий мыши
Скопируйте код кода следующим образом:
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered (MouseEvent arg0) {
}
@Override
public void mouseExited (MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
перекрасить();
c1=arg0.getX();
c2=arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
перекрасить();
если (drag_status == 1)
{
c3=arg0.getX();
c4=arg0.getY();
пытаться
{
перетащилЭкран();
}
поймать (Исключение е)
{
е.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent arg0) {
перекрасить();
перетаскивание_статус = 1;
c3=arg0.getX();
c4=arg0.getY();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
общественная краска пустоты (Графика г)
{
супер.краска(г);
интервал ш = с1 - с3;
int h = c2 - c4;
ш = ш * -1;
ч = ч * -1;
если (ш<0)
ш = ш * -1;
g.drawRect(c1, c2, w, h);
}
проиллюстрировать:
Сохраните текущие координаты в c1 и c2 при нажатии мыши.
Установите для переменной состояния перетаскивания drag_status значение true, когда мышь нажата и начинается перетаскивание.
Когда кнопка мыши отпущена, это означает, что область обрезки изображения выбрана и вызывается метод перетаскиваемого экрана.
Метод Paint используется для отображения прямоугольника при перетаскивании и рисует прямоугольник по текущим координатам и изначально записанным координатам.
Ниже приведен код метода перетаскивания экрана.
Скопируйте код кода следующим образом:
Листинг 4: метод draggedScreen
public void draggedScreen() выдает исключение
{
интервал ш = с1 - с3;
int h = c2 - c4;
ш = ш * -1;
ч = ч * -1;
Робот-робот = новый робот();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
Файл save_path=новый файл("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Обрезанное изображение успешно сохранено.");
}}
проиллюстрировать:
Сначала рассчитайте высоту и ширину изображения.
Используйте класс Robot, чтобы сделать снимок экрана обрезанной области и сохранить его в другом файле screen1.jpg.
полный код
Скопируйте код кода следующим образом:
Листинг 5: ImagePanel.java
импортировать java.awt.Dimension;
импортировать java.awt.Graphics;
импортировать java.awt.Image;
импортировать javax.swing.ImageIcon;
импортировать javax.swing.JPanel;
класс ImagePanel расширяет JPanel {
личное изображение img;
public ImagePanel (String img) {
это(новый ImageIcon(img).getImage());
}
общественная ImagePanel (изображение img) {
это.img = img;
Размер измерения = новый размер (img.getWidth(null), img.getHeight(null));
// Размер измерения = новое измерение(10,10);
setPreferredSize (размер);
setMinimumSize (размер);
setMaximumSize (размер);
setSize (размер);
setLayout (нуль);
}
public voidpaintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
}
Листинг 6: CropImage.java
импортировать java.awt.Graphics;
импортировать java.awt.Rectangle;
импортировать java.awt.Robot;
импортировать java.awt.event.MouseEvent;
импортировать java.awt.event.MouseListener;
импортировать java.awt.event.MouseMotionListener;
импортировать java.awt.image.BufferedImage;
импортировать java.io.File;
импортировать javax.imageio.ImageIO;
импортировать javax.swing.JFrame;
общедоступный класс CropImage расширяет JFrame, реализует MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main(String args[])
{
новый CropImage().start();
}
публичное недействительное начало()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
добавить (им);
setSize(400,400);
setVisible (истина);
addMouseListener (это);
addMouseMotionListener (это);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void draggedScreen() выдает исключение
{
интервал ш = с1 - с3;
int h = c2 - c4;
ш = ш * -1;
ч = ч * -1;
Робот-робот = новый робот();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
Файл save_path=новый файл("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Обрезанное изображение успешно сохранено.");
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited (MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
перекрасить();
c1=arg0.getX();
c2=arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
перекрасить();
если (drag_status == 1)
{
c3=arg0.getX();
c4=arg0.getY();
пытаться
{
перетащилЭкран();
}
поймать (Исключение е)
{
е.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent arg0) {
перекрасить();
перетаскивание_статус = 1;
c3=arg0.getX();
c4=arg0.getY();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
общественная краска пустоты (Графика г)
{
супер.краска(г);
интервал ш = с1 - с3;
int h = c2 - c4;
ш = ш * -1;
ч = ч * -1;
если (ш<0)
ш = ш * -1;
g.drawRect(c1, c2, w, h);
}
}