Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    32

    Concatenazione immagini

    Salve a tutti.
    Con il codice sottostante, ho confrontato il bordo di destra con il bordo di sinistra di due immaini in modo da affiancarle per ottenere una immagine grande. Come faccio a visualizzarle affiancate utilizzando il BufferedImage, oppure per convenienza il MediaTracker? Cerco dunque un consiglio, o ancora meglio, se qualcuno avesse un codice per la concatenazione di immagini...potrebbe inviarmelo? Grazie a tutti.

    // Ciclo for utilizzato per il OVEST (destra) della seconda immagine

    for (int x1=0, y1=0; y1<height1; y1++)


    {
    oldColor1 = new Color(input1.getRGB(x1, y1), true);
    newColor1 = new Color((int) oldColor1.getRed(), (int) oldColor1.getGreen(),(int) oldColor1.getBlue());
    //output1.setRGB(x1, y1, newColor1.getRGB());
    // System.out.println("EST Seconda immagine: "+ oldColor1);
    }


    try
    {
    System.out.println(newColor.getRGB());
    System.out.println(newColor1.getRGB());
    if((int)newColor.getRGB()==(int)newColor1.getRGB() )
    {
    System.out.println("Uguali...posso attaccarli");
    }
    else
    System.out.println("Non possono essere attaccarli, xkè è diverso il bordo laterale.");
    System.out.println(((Comparable)(newColor)).compar eTo(newColor1));
    }

    catch(Exception e)
    {
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Se permetti, io cambierei un po' approccio, visto che tra l'altro hai la possibilità di usare BufferedImage... conviene sfruttarne appieno alcune potenzialità.

    In particolare, facciamo finta che

    Buffered img1, img2 siano i BufferedImage che contengono i due spezzoni di immagine, che il confronto con i bordi sia andato a buon fine e che quindi sia possibile concatenare le due immagini, con img1 a sinistra e img2 a destra (ossia il bordo EST di im1 combacia con il bordo OVEST di img2).

    codice:
    //Creiamo un BufferedImage adatto a contenere i due spezzoni, quindi sarà
    //largo come la somma delle larghezze di img1 e img2 e alto
    //come l'altezza di qualsiasi delle due immagini, con lo stesso TYPE
    
    BufferedImage destimage = new BufferedImage(img1.getWidth()+img2.getWidth(), img1.getHeight(), img1.getType());
    
    //Andiamo a prendere il WritableRaster collegato a destimage: questo ci consente
    //di accedere rapidamente a qualsiasi area della destimage per andarvi a scrivere
    //i dati provenienti da img1 e img2
    
    WritableRaster wr = destimage.getRaster();
    
    //quindi scriviamo i dati a partire dall'angolo in alto a sx (per img1)
    wr.setDataElements(0, 0, img1.getData());
    
    //saltiamo un rettangolo di larghezza opportuna (ossia della larghezza di img1)
    //e scriviamo i dati relativi ad img2
    wr.setDataElements(img1.getWidth(), 0, img2.getData());
    
    //non ci resta che farne il display: per comodità schiaffo destimage in
    //un JLabel che utilizzo nella mia interfaccia grafica... 
    JLabel label = new JLabel(new ImageIcon(destimage));
    //si può anche sovrascivere paintComponent e settare 
    //destimage come background di un JPanel... cerca nel forum per questa 
    //seconda soluzione.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.