Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Sequenza immagini .png

  1. #1

    Sequenza immagini .png

    Con questo codice riesco a mandare in loop una sequenza di immagini.
    Devo scrivere però scrivere il percorso di ogni immagine ma siccome ne ho centinaia come posso fare a dire parti della prima e vai fino alla fine? Grazie

    codice:
    package PACK;
    import java.awt.Color;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    
    
    
    
    public class Project extends JFrame{
        JLabel pic;
        Timer tm;
        int x = 0;
    
    
    
    
    
    
        //Images Path In Array
        String[] list = {
    			"C:/Users/Desktop/JAVAnew/SEQUENZAimmagini/SQ1/CAMION0018.png",
    			"C:/Users/Desktop/JAVAnew/SEQUENZAimmagini/SQ1/CAMION0019.png",
    			"C:/Users/Desktop/JAVAnew/SEQUENZAimmagini/SQ1/CAMION0020.png",
    			"C:/Users/Desktop/JAVAnew/SEQUENZAimmagini/SQ1/CAMION0021.png",
    			"C:/Users/Desktop/JAVAnew/SEQUENZAimmagini/SQ1/CAMION0022.png",
    			"C:/Users/Desktop/JAVAnew/SEQUENZAimmagini/SQ1/CAMION0023.png"
    			
    		};
    	
    
    
    	
        public Project(){
            super("Java SlideShow");
            pic = new JLabel();
            pic.setBounds(40, 30, 700, 300);
    
    
    
    
    
    
    
    
            //Call The Function SetImageSize
            SetImageSize(5);
            
    
    
    
    
           //set a timer
            tm = new Timer(40,new ActionListener() {
    
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    SetImageSize(x);
                    x += 1;
                    if(x >= list.length )
                        x = 0; 
                }
            });
            add(pic);
            tm.start();
            setLayout(null);
            setSize(800, 400);
            getContentPane().setBackground(Color.decode("#000000"));
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
        //create a function to resize the image 
        public void SetImageSize(int i){
            ImageIcon icon = new ImageIcon(list[i]);
            Image img = icon.getImage();
            Image newImg = img.getScaledInstance(pic.getWidth(), pic.getHeight(), Image.SCALE_SMOOTH);
            ImageIcon newImc = new ImageIcon(newImg);
            pic.setIcon(newImc);
        }
    
    
    public static void main(String[] args){ 
          
        new Project();
    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Devo scrivere però scrivere il percorso di ogni immagine ma siccome ne ho centinaia come posso fare a dire parti della prima e vai fino alla fine?
    Beh, la questione è innanzitutto un'altra: cosa la applicazione deve "sapere" di queste immagini?

    a) le immagini fanno parte fissa della applicazione?
    oppure
    b) le immagini devono essere scelte/configurabili a discrezione dell'utente? Se sì, cosa deve sapere la applicazione: una directory base in cui cercare le immagini? un elenco di pathname passato o configurato dall'utente?


    P.S. il codice che hai scritto comunque è un po' "spartano" ... andrebbe sistemato un po'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Vorrei che con un pulsante "cercare". Io possa aprire la cartella che desidero, contenente la sequenza di immagini .png, una volta selezionata la cartella il programmino le faccia partire dalla prima all'ultima immagine contenuta nella cartella.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Vorrei che con un pulsante "cercare". Io possa aprire la cartella che desidero, contenente la sequenza di immagini .png, una volta selezionata la cartella il programmino le faccia partire dalla prima all'ultima immagine contenuta nella cartella.
    Puoi:
    1) Far scegliere la directory all'utente usando JFileChooser. Nota che JFileChooser ha anche una modalità di selezione "directories only" (puoi solo selezionare directory, non file).
    2) Con il java.io.File che rappresenta la directory scelta, usi i metodi list o listFiles per elencare i file. Puoi anche applicare un "filtro" in modo da cercare es. tutti i file con estensione .png
    3) Per ciascun file rintracciato .... fai il caricamento come devi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok grazie ci provo

  6. #6
    codice:
    ButtonSearch = new JButton("Search");
            ButtonSearch.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    JFileChooser chooser = new JFileChooser();   //trova file--------------------------------------------
    
    
                    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    
    
                    chooser.showOpenDialog(null);
                   
                    FileNameExtensionFilter filter = new FileNameExtensionFilter("png");
                    
                    File f[] = (new File(getName()).listFiles(filter);
                    String filename=f.getName();
    
    
                                                  
                }
            });
    Le ultime due righe di codice so che sono errate ma non capisco come posso dirgli prendi questi file che ho selezionato nelle righe di codice sopra all'errore. Non so qual è il modo giusto di dirglielo.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    codice:
                    chooser.showOpenDialog(null);
                   
                    FileNameExtensionFilter filter = new FileNameExtensionFilter("png");
                    
                    File f[] = (new File(getName()).listFiles(filter);
                    String filename=f.getName();
    Le ultime due righe di codice so che sono errate ma non capisco come posso dirgli prendi questi file che ho selezionato nelle righe di codice sopra all'errore. Non so qual è il modo giusto di dirglielo.
    Innanzitutto il valore di ritorno di showOpenDialog andrebbe testato (non ricordo se l'avevo già detto a te o a un altro utente di recente sul forum). Solo se l'utente ha "approvato" la selezione, allora puoi proseguire.

    Se l'utente ha approvato, allora usi getSelectedFile() di JFileChooser per ottenere il java.io.File che rappresenta la directory (non può essere ovviamente un file comune se la modalità è DIRECTORIES_ONLY).

    Con il File, usi listFiles(filter) per ottenere un array di File. L'array lo dovrai poi ovviamente iterare andando poi a usare ciascun oggetto File.


    NOTE:
    1) Hai usato FileNameExtensionFilter("png"), è sbagliato!
    Guarda la documentazione:

    FileNameExtensionFilter(String description, String... extensions)

    Come primo parametro DEVI passare una descrizione e poi DEVI passare 1+ estensioni.

    2) Non te l'ho detto prima perché non ci ho pensato subito. Se usi ImageIcon per caricare le immagini, ok. Tieni però presente che ImageIcon usa il Toolkit di AWT per il caricamento delle immagini. Il getImage di Toolkit (usato da ImageIcon) applica un meccanismo di "caching" delle immagini.
    A parità di url/filename, restituisce sempre lo stesso oggetto Image. Ovvero, tutte le immagini restano memorizzate in memoria.

    In sostanza, se dovesse capitare di avere decine e decine di immagini e magari un pochino grosse, è possibile che il tuo heap space si esaurisca. Questo è un aspetto che devi valutare ed eventualmente usare alternative.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Innanzitutto il valore di ritorno di showOpenDialog andrebbe testato (non ricordo se l'avevo gi� detto a te o a un altro utente di recente sul forum). Solo se l'utente ha "approvato" la selezione, allora puoi proseguire.
    si s� l'avevi detto a me ok lo sistemo.

    Se l'utente ha approvato, allora usi getSelectedFile() di JFileChooser per ottenere il java.io.File che rappresenta la directory (non pu� essere ovviamente un file comune se la modalit� � DIRECTORIES_ONLY)
    .
    Vorrei selezionare solo la cartella contenente la sequenza png e che lui capisse di prenderle tutte le immagini. � giusto con il directory only? Avevo capito cos� e ti chiedo se ho capito male.

    Con il File, usi listFiles(filter) per ottenere un array di File. L'array lo dovrai poi ovviamente iterare andando poi a usare ciascun oggetto File
    .
    guardo cosa intendi su questo e ti dico. Grazie


    NOTE:
    1) Hai usato FileNameExtensionFilter("png"), � sbagliato!
    Guarda la documentazione:

    FileNameExtensionFilter(String description, String... extensions)

    Come primo parametro DEVI passare una descrizione e poi DEVI passare 1+ estensioni
    .
    ma infatti cosa serve la descrizione? Cio� cosa fa? Grazie

    2) Non te l'ho detto prima perch� non ci ho pensato subito. Se usi ImageIcon per caricare le immagini, ok. Tieni per� presente che ImageIcon usa il Toolkit di AWT per il caricamento delle immagini. Il getImage di Toolkit (usato da ImageIcon) applica un meccanismo di "caching" delle immagini.
    A parit� di url/filename, restituisce sempre lo stesso oggetto Image. Ovvero, tutte le immagini restano memorizzate in memoria.

    In sostanza, se dovesse capitare di avere decine e decine di immagini e magari un pochino grosse, � possibile che il tuo heap space si esaurisca. Questo � un aspetto che devi valutare ed eventualmente usare alternative
    .
    cos'altro si usa per invece poterne caricare molte? Grazie

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    si s� l'avevi detto a me.
    Sei recidivo allora ...
    Scherzo, ovviamente.

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Vorrei selezionare solo la cartella contenente la sequenza png e che lui capisse di prenderle tutte le immagini. � giusto con il directory only? Avevo capito cos� e ti chiedo se ho capito male.
    Il fatto del "che lui capisse di prenderle tutte" ovviamente devi farlo tu programmaticamente ... non c'è nulla di "magico" in questo.
    Se hai una directory, puoi ottenere (con i metodi di File) tutte le entry della directory, eventualmente filtrate.
    Concettualmente esattamente come quando da prompt fai es. dir C:\blabla oppure dir C:\blabla\*.png

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    guardo cosa intendi su questo e ti dico.
    Vedi documentazione dei list() e listFiles() di java.io.File.


    Quote Originariamente inviata da desiderio Visualizza il messaggio
    ma infatti cosa serve la descrizione? Cio� cosa fa?
    Ok, scusa .... non me ne sono accorto subito prima io e avrei dovuto fermarti prima.

    FileNameExtensionFilter estende javax.swing.filechooser.FileFilter che è un FileFilter che è specifico SOLO per l'uso con JFileChooser. La descrizione infatti viene usata e mostrata nel JFileChooser. Qui ha senso.

    Per usare i "filtri" con i metodi di File devi usare
    - un java.io.FileFilter
    oppure
    - un java.io.FilenameFilter

    Come vedi questi sono specifici del package java.io. Questi due tipi sono delle interface e rappresentano solo il predicato "accetta un file oppure no". E non c'è alcuna descrizione ... non avrebbe senso.

    In sostanza: NON puoi usare FileNameExtensionFilter. Devi per forza farti una tua implementazione di una di queste due interfacce.

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    cos'altro si usa per invece poterne caricare molte? Grazie
    Il punto è un altro. Se vuoi davvero tenere in memoria tantissime immagini, allora devi sapere come dimensionare il heap-space in modo adeguato. Se le devi tenere tutte in memoria non c'è molto che tenga ... hai bisogno del heap-space sufficiente per fare questo.

    Ma la questione è, se vuoi fare una specie di "slide show", la domanda è semplice: devi per forza caricarle tutte in memoria?? La risposta in generale è NO. Puoi anche valutare una logica del tipo: carico la immagine necessaria in un certo momento, appena ne devo visualizzare un'altra la carico e l'altra la rendo non "raggiungibile", così che venga garbage collected.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Intanto grazie. Non capisco proprio tutto ma passo passo mi informo e ti chiedo con pi� cognizione basandomi su quello che mi dici.
    Per il programma che sogno desidero come in after effects, visualizzare una sequenza .png (come un video a 25fps) intanto riuscire a fare questo.
    Poi aggiungere, play, stop, pause e poi tipo tre bottoni Es. botton1, button2, button3, se premo l'1 e il 3 e premo play partono le sequenze di immagini associate Ha questi bottoni. P.S. Le sequenze possono contenere anche 2000 immagini per questo nn posso scrivere la directory di ogni singola png.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.