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
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
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
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
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
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
Avevo lavorato parecchio sulle immagini ma ho tutto a casa.
Cmq usa questo costruttore:
Dove i parametri sono tutti compresi tra 0 e 255.codice:Color c = Color(int r, int g, int b, int a);
..::200 post il 1 settembre 2004::..
..::100 13/07/2004::..
..): Web Site (pazienza però)..
VASCO castiga chi non lecca la FIGA
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:
il fatto è ke mi stampa tutti 0. l'oggetto image è di tipo BufferedImage e corrisponde alla seconda immagine...codice:ColorModel colorModel = image.getColorModel(); for(int i = 0; i < image.getWidth()*image.getHeight(); i++) { System.out.println(colorModel.getAlpha(i)); }
Fede
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:
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.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);
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