Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Come usare il getScaledInstance e la dimensione per salvare l'immagine del Screen Capture?

    Come posso fare per far si che si ridimensioni l'immagine nel Jlabel con il getScaledInstance?
    La salva in 1680*1080px come posso salvarla in 1920*1080? grazie
    codice:
        public void actionPerformed(ActionEvent arg0) {
                    
                    try{
                        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
                        BufferedImage capture = new Robot().createScreenCapture(screenRect);
                        ImageIcon icon = new ImageIcon(capture);
                    
                        
                        
                        LabelCAPTURE.setIcon(icon );
                        
                        
                        String nomefile = TextNOMEfile.getText();
                        ImageIO.write(capture,  "jpg", new File("Salva IMAGE\\" + nomefile + ".jpg"));
                          
                        
                         
                    
                    }catch (Exception ex) {
                        JOptionPane.showMessageDialog(null, ex);
                        
                    }
                }
            });
    In ultimo come posso scrivere un testo in un JTextField e copiarlo sull'immagine che viene salvata?
    Ultima modifica di desiderio; 14-01-2017 a 06:01

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    La salva in 1680*1080px come posso salvarla in 1920*1080?
    Ma così cambia il aspect-ratio (rapporto larghezza/altezza)! Vuoi davvero fare uno "stretching" orizzontale? O vuoi centrare orizzontalmente mantenendo quindi il aspect-ratio??

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    In ultimo come posso scrivere un testo in un JTextField e copiarlo sull'immagine che viene salvata?
    La immagine fornita dal screen capture è un BufferedImage, che è una immagine completamente "bufferizzata" in memoria ed è modificabile pixel per pixel come si vuole.
    Prendi il suo Graphics2D e usi le primitive di disegno es. drawText. Entrano in gioco chiaramente font, colore e altro impostabile sul Graphics2D.
    Alla fine di tutto il painting è importante fare un dispose() sul Graphics2D. A quel punto la immagine è modificata e puoi farci altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da andbin Visualizza il messaggio
    usi le primitive di disegno es. drawText
    drawString .... non drawText
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Intanto grazie
    vorrei centrare orizzontalmente mantenendo quindi il aspect-ratio se possibile modificare anche i dpi.
    Ultima modifica di desiderio; 14-01-2017 a 18:30

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    vorrei centrare orizzontalmente mantenendo quindi il aspect-ratio
    Allora la questione è un po' diversa. Nel senso che non basta (e non serve!) getScaledInstance.

    Devi fare le seguenti operazioni:
    1) Creare un nuovo BufferedImage di 1920x1080 pixel
    2) Ottenere il suo Graphics2D
    3) Riempire la immagine (metodo fillRect) con un colore di sfondo, es. bianco (se non sbaglio il default è nero) o come vuoi
    4) Disegnare la immagine catturata (uno dei metodi drawImage) ad un certo offset, che calcolato è x=(1920-1680)/2=120 e y=0
    5) Fare il dispose() del Graphics2D

    La immagine è quindi pronta.

    Per il 1) è sufficiente:
    BufferedImage bufImg = new BufferedImage(1920, 1080, BufferedImage.TYPE_INT_RGB);

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    se possibile modificare anche i dpi.
    Qui c'è da chiarire. Il "dpi" ovvero dot-per-inch entra in gioco SOLO quando un tot di pixel vengono rapportati ad una dimensione FISICA (in pollici, appunto da inch).
    1920 pixel sono 1920 pixel ... e basta. La nozione di dpi non cambia nulla nei pixel o nella immagine in sé. L'unica cosa che si può impostare (e sui JPEG è possibile) è un "meta-dato" all'interno del file immagine, in modo che un altro programma che dovesse "aprire" la immagine, ad esempio per poi stamparla su carta, possa sapere quale è il dpi assunto per quella immagine.

    Con la API ImageIO mi pare ci sia il modo per cambiare dei meta-dati delle immagini ma se ben ricordo non è proprio banale. E poi ripeto, dipende da DOVE verrà usata la immagine.
    Consiglio: per il momento ignora la questione del dpi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    codice:
    g2.drawString(TestoImmagine, W, H);    
                        
                        
                       
                        
                        
                        String DATAora = DateTimeFormatter.ofPattern("  dd-MM-yyyy").format(localDate) + sdf.format(date);
                        String nomefile = TextNOMEfile.getText();
                       
    
    
                        String x = "I";
    
    
                        TextNOMEfile.setText(nomefile + x); 
    
    
                        LabelCAPTURE.setSize(icon.getImage().getWidth(null), icon.getImage().getHeight(null));
    
    
                        LabelCAPTURE.setIcon(icon);
                         
                    
                    
                        ImageIO.write(capture,  "jpg", new File("Salva IMAGE\\" + nomefile + DATAora + ".jpg"));
                          
                         Image img1 = Toolkit.getDefaultToolkit().getImage("Salva IMAGE\\" + nomefile + DATAora + ".jpg");
                         BufferedImage bufImg = new BufferedImage(1920, 1080, BufferedImage.TYPE_INT_RGB);
                         Graphics2D g3 = bufImg.createGraphics();
                         g3.fillRect (0,0,200,200);
                         g3.drawImage(img1, 10, 10, this);
                         
                    
                    }catch (Exception ex) {
                        JOptionPane.showMessageDialog(null, ex);
                        
                    }
    Sono riusito nel resto ma mi da errore sul .drawImage come posso risolverlo? grazie

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Scusa ma .. quale è il senso di

    codice:
    ImageIO.write(capture,  "jpg", new File("Salva IMAGE\\" + nomefile + DATAora + ".jpg"));                                           Image img1 = Toolkit.getDefaultToolkit().getImage("Salva IMAGE\\" + nomefile + DATAora + ".jpg");
    ??

    Non ha senso ...

    Ah il 4o parametro di quel drawImage (il Observer) può essere null in questo caso.

    Rivedi il tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    codice:
    ImageIO.write(capture,"jpg",newFile("Salva IMAGE\\"+ nomefile +DATAora+".jpg"));
    Mi salva l'immagine nella cartella "Salva IMAGE" all'interno della directory con "nomefile" come variabile assiociata a un Jtextfield, "DataOra" appunto con data e ora. Senza questa riga di codicew non salvo.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Mi salva l'immagine nella cartella "Salva IMAGE" all'interno della directory con "nomefile" come variabile assiociata a un Jtextfield, "DataOra" appunto con data e ora. Senza questa riga di codicew non salvo.
    Ma perché fare un ImageIO.write e poi appena la riga dopo RICARICHI la immagine?? È questo che è dubbio! Oltretutto jpeg è "lossy", se rileggi hai già perso in qualità.

    Quindi
    a) catturi lo schermo
    b) crei un BufferedImage di 1920x1080 pixel, con sfondo che vuoi
    c) ci disegni sopra lo schermo catturato, centrato
    d) ci disegni sopra un testo che vuoi, dove vuoi
    e) dispose del Graphics2D

    La immagine è pronta, fai quello che vuoi, es scrittura jpg
    Quali dubbi ci sono?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Anche togliendo il codice,
    codice:
    ImageIO.write(capture,  "jpg", new File("Salva IMAGE\\" + nomefile + DATAora + ".jpg"));
    drawImage mi da errore

    codice:
    ButtonIMAGE = new JButton("Screen Capture");
    		ButtonIMAGE.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				
    
    
    				try{
    					//Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
    					
    					int WScreen =Integer.parseInt(TextWScreen .getText());
    					int HScreen =Integer.parseInt(textHScreen.getText());
    					
    					
    					 int x1 = 0;
    					 int y1 = 0;
    					 int width = WScreen;
    					 int height = HScreen;
    					Rectangle screenRect = new Rectangle(x1, y1, width, height);
    					BufferedImage capture = new Robot().createScreenCapture(screenRect);
    			        ImageIcon icon = new ImageIcon(capture);
    				    
    			        String color = textCOLOR.getText();
    			        int fontDIM =Integer.parseInt(textFONT.getText());
    			        int W = Integer.parseInt(TextW.getText());
    			        int H = Integer.parseInt(textH.getText());
    			        
    			        
    			        Graphics2D g2 = capture.createGraphics();
    					String TestoImmagine = txtText.getText();
    					Font font = new Font("Courier", Font.BOLD,fontDIM);
    					g2.setColor(Color.decode(color));
    	                g2.setFont(font);
    				    g2.drawString(TestoImmagine, W, H);	
    				    
    				    
    				   
    			        
    			        
    					String DATAora = DateTimeFormatter.ofPattern("  dd-MM-yyyy").format(localDate) + sdf.format(date);
    					String nomefile = TextNOMEfile.getText();
    				   
    
    
    					String x = "I";
    
    
    					TextNOMEfile.setText(nomefile + x); 
    
    
    					LabelCAPTURE.setSize(icon.getImage().getWidth(null), icon.getImage().getHeight(null));
    
    
    					LabelCAPTURE.setIcon(icon);
    					 
    				
    				
    
    
    					  
    					Image img1 = Toolkit.getDefaultToolkit().getImage("Salva IMAGE\\" + nomefile + DATAora + ".jpg");
    					BufferedImage bufImg = new BufferedImage(1920, 1080, BufferedImage.TYPE_INT_RGB);
    					Graphics2D g3 = bufImg.createGraphics();
    					g3.fillRect (0,0,200,200);
    					g3.drawImage(img1, 10, 10, this);
    					g3.dispose();
    				
    				}catch (Exception ex) {
    					JOptionPane.showMessageDialog(null, ex);
    					
    				}
    				
    				
    			}
    
    
    	
    		});

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.