PROBLEMA Auto-crop in Java/Python

Reeaver

Utente Attivo
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:

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.
 

fedi98

Nuovo Utente
121
8
Io proverei ad avere una matrice di pixel da una data immagine (ho cercato su stackoverflow e ho trovato discussioni in merito), poi selezionare una parte dei tuoi pixel(ovvero la parte che vuoi ingrandire), e con quei pixel riformare l' immagine
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!