Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    (Java) unione d 2 immagini

    io avrei bisogno di fare la cosa seguente:
    + =

    cioè da 2 immagini ottenere la terza, che sostanzialmente è la fusione delle 2. esiste qualche metodo particolare???

    grazie
    Fede

  2. #2
    Cioè dovresti ottenere un'immagine dove ogni pixel è la somma (o meglio la media perchè i valori per i colori sono limitati) del pixel corrispondente nelle 2 immagini di partenza?
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  3. #3
    mah, appunto questo ho bisogno di sapere. diciamo che devo ottenere l'effetto finale, ke effettivamente è la somma dei due. se tu pensi ke basti fare la media, dovrebbe bastare prendere le coppie di pixel che nelle 2 immagini s trovano alle stesse coordinate, fare la media dei valori RGB e infine disegnare l'immagine finale con questi valori. nn saprei dire se ottengo l'effetto desiderato!

    l'idea ke mi ero fatto io è ke dovrei prendere ogni pixel della prima immagine e dargli il livello di ombreggiatura del pixel corrispondente nella seconda... ma nn ho idea d cm si faccia!
    Fede

  4. #4
    Forse l'effetto che vuoi ottenere è quello di sovrapporre la seconda immagine alla prima...
    Se è così devi lavorare con il canale alpha della seconda immagine (i colori in java sono interi (quindi 4 byte), gli ultimi 3 sono i valori dei colori RGB mentre il primo rappresenta la trasparenza).
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  5. #5
    ma ho già provato a fare così, solo ke sbaglio qualcosa nel codice. io creo 2 oggetti BufferedImage e poi prendo pixel x pixel col metodo
    getRGB(int i, int j)
    poi creo un colore con
    Color c = new Color(<valore rgb>);
    e infine uso
    c.getAlpha()
    x ottenere la trasparenza, ma x ogni pixel mi restituisce 255 cm valore di alpha!!!

    effettivamente cm ragionamento nn penso sia poi così giusto, ma cm devo fare altrimenti??? nn riesci a buttarmi giù 1 pezzettino d codice???

    grazie
    Fede

  6. #6
    Avevo lavorato parecchio sulle immagini ma ho tutto a casa.

    Cmq usa questo costruttore:

    codice:
    Color c = Color(int r, int g, int b, int a);
    Dove i parametri sono tutti compresi tra 0 e 255.
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  7. #7
    e invece cm posso fare ad ottenere il valore dell'alpha da un particolare pixel presente nel BufferedImage?

    ho provato a fare la cosa seguente:

    codice:
    ColorModel colorModel = image.getColorModel();
          for(int i = 0; i < image.getWidth()*image.getHeight(); i++)
          {
              System.out.println(colorModel.getAlpha(i));
          }
    il fatto è ke mi stampa tutti 0. l'oggetto image è di tipo BufferedImage e corrisponde alla seconda immagine...
    Fede

  8. #8
    alla fine c sono riuscito... dunque, ho creato 1 nuova classe che estende un JPanele ho sovrascritto il metodo paint(Graphics g).
    questo è il codice:

    codice:
          Graphics2D g2 = (Graphics2D)g;
          if(backImage.getWidth() > -1 && backImage.getHeight() > -1 && 
             jerseyImage.getWidth() > -1 && jerseyImage.getHeight() > -1 && 
             backImage.getRGB(0, 0) != 0 && jerseyImage.getRGB(0, 0) != 0)
          {
            for(int i = 0; i < backImage.getWidth(); i++)
            {
              for(int j = 0; j < backImage.getHeight(); j++)
              {
                Color c1 = new Color(backImage.getRGB(i, j));
                Color c2 = new Color(jerseyImage.getRGB(i, j));
                Color c = new Color((c1.getRed() + c2.getRed()) / 2, 
                                   (c1.getGreen() + c2.getGreen()) / 2, 
                                   (c1.getBlue() + c2.getBlue()) / 2);
                ig2.setColor(c);
                ig2.drawRect(i, j, 1, 1);
              }
            }
          }
          // Disegna l'immagine sul pannello
          g2.drawImage(risImg, null, 0, 0);
    ho tralasciato alcune parti del metodo, cmq backImage (la prima immagine), jerseyImage(la seconda immagine) e risImage(il risultato) sono BufferedImage di dimensioni 128 x 128 e di tipo TYPE_4BYTE_ABGR.

    il tutto restituisce il risultato desiderato, solo ke c mette almeno 1 o 2 secondi a visualizzare l'immagine... nn ci può fare qualcosa x velocizzare il tutto??? grazie
    Fede

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.