- 1,188
- 134
- CPU
- AMD RYZEN 5 1600
- Dissipatore
- NOCTUA NH-U12S
- Scheda Madre
- MSI B350 TOMAHAWK
- HDD
- SSD SAMSUNG 860 EVO 500 GB + CRUCIAL MX 1TB
- RAM
- HYPER X 16GB 2400MHz DDR4 LP
- GPU
- ASUS ROG STRIX GTX1070 O8GB
- Audio
- SOUNDBLASTER AUDIGY FX
- Monitor
- LG ULTRAGEAR 2K
- PSU
- SEASONIC SSR-550M
- Case
- NZXT S340
- Periferiche
- MOUSE, TASTIERA, MANI
- Net
- FIBRA FTTH 1GB
- OS
- WINDOWS 10 PRO 64-BIT
Salve
Il problema è questo: dovrei scrivere un programma che, una volta aperto, mi ritagli in automatico un'area (di dimensioni fisse) di un immagine.
Fino ad ora ho usato le librerie Marvin e il tutto funziona tranne un piccolo dettaglio: devo selezionare io a mano (drag del mouse) l'area da ritagliare.
Tutto dovrebbe essere automatico invece....
Questo è il codice:
Il risultato è questo (a grandi linee...)
Come si può (difficilmente) vedere, il rettangolo nero di selezione è stato fatto usando il mouse...
P.S se la stessa cosa si può fare anche in Python (provato a con scarsi risultati fino ad ora..) va bene uguale.
Il problema è questo: dovrei scrivere un programma che, una volta aperto, mi ritagli in automatico un'area (di dimensioni fisse) di un immagine.
Fino ad ora ho usato le librerie Marvin e il tutto funziona tranne un piccolo dettaglio: devo selezionare io a mano (drag del mouse) l'area da ritagliare.
Tutto dovrebbe essere automatico invece....
Questo è il codice:
Codice:
package TF1;
//IMPORT DI LIBRERIE NECESSARIE
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class CropImage extends JFrame implements MouseListener, 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("C:\\Users\\wkgrp\\Desktop\\test.png");
add(im);
setSize(815,460);
setVisible(true);
setName("Test");
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void draggedScreen()throws Exception
{
//int w = 340;
//int h = 100;
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h= h * -1;
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1,c2,w,h));
File save_path=new File("C:\\Users\\wkgrp\\Desktop\\1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Cropped image saved successfully.");
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
repaint();
c1=arg0.getX();
c2=arg0.getY();
}
@Override
public void mouseReleased(MouseEvent arg0) {
repaint();
if(drag_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
try
{
draggedScreen();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent arg0) {
repaint();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
//MOSTRA RETTANGOLO DI SELEZIONE
public void paint(Graphics 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);
}
}
Il risultato è questo (a grandi linee...)
Come si può (difficilmente) vedere, il rettangolo nero di selezione è stato fatto usando il mouse...
P.S se la stessa cosa si può fare anche in Python (provato a con scarsi risultati fino ad ora..) va bene uguale.