Salve a tutti,
in poche parole ho un immagine in java (bufferedImage) e la devo dividere in tre parti e riassemblare le tre parti a random.
la divisione la faccio con subImage, ma non so come incollarla![]()
Salve a tutti,
in poche parole ho un immagine in java (bufferedImage) e la devo dividere in tre parti e riassemblare le tre parti a random.
la divisione la faccio con subImage, ma non so come incollarla![]()
Crea un'altra immagine della dimensione voluta, ottieni i due Graphics (Graphics2D) dalle due immagini e banalmente invoca dei drawImage() per disegnare la immagine sorgente (o sue sottoparti) nell'altra immagine.Originariamente inviato da logangt
in poche parole ho un immagine in java (bufferedImage) e la devo dividere in tre parti e riassemblare le tre parti a random.
la divisione la faccio con subImage, ma non so come incollarla![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
No....ora sono io che non ho capito.Originariamente inviato da andbin
Crea un'altra immagine della dimensione voluta, ottieni i due Graphics (Graphics2D) dalle due immagini e banalmente invoca dei drawImage() per disegnare la immagine sorgente (o sue sottoparti) nell'altra immagine.
ok, prelevo i tre Graphics dalle immagini e qui tutto ok.
Poi creo un'immagine img della dimensione voluta, ed anche qui ok ( anche se devo ancora capire le dimensione come vengono impostate ).
Ma il metodo drawImage di Graphics richiede un ImageObserver che non ho capito come creare....
(ps. Niubbo completo per quanto riguarda l'elaborazione grafica in java )
Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli
ho 3 immagini:
A, B, C ne devo creare una immagine D cosi fatta
dividere le tre immagini in tre parti sceglierne 1 a caso e aggiungere la tessera alla immagine D
esempio
divido A in A1,A2,A3 e ne scelgo una tessera... alla fine D=(A2,B1,C3)esempio
ma non mi vusualizza niente...
vi posto il codice:
public class GestoreImmagine {
private static final int MAX_NUM_IMMAGINE = 3;
private BufferedImage[] randomImages;
public GestoreImmagine() {
randomImages = new BufferedImage[MAX_NUM_IMMAGINE];
}
public void selectRandomImages(File _selectedDir) throws IOException {
String[] filesOfTypeJpeg = _selectedDir.list();
for (int i = 0; i < MAX_NUM_IMMAGINE{
int randomVar = (int) (Math.random() * filesOfTypeJpeg.length);
if (filesOfTypeJpeg[randomVar].endsWith(".jpg")) {
randomImages[i] = resize(ImageIO.read(new File(_selectedDir
+ "/" + filesOfTypeJpeg[randomVar])));
i++;
}
}
}
le immagini devono avere dimensione fissa 900x900
// Utils da spostare e static!!!
public BufferedImage resize(BufferedImage _source) {
int defaultHeight = 900;
int defaultWidth = 900;
BufferedImage resized = new BufferedImage(defaultWidth, defaultHeight, _source.getType());
Graphics2D g2D = resized.createGraphics();
g2D.drawImage(_source, 0, 0, null);
g2D.dispose();
return resized;
}
l' immagine D ha dim 900x900 e si ottiene dividendo le tre immagine in tre regioni di 300x900
public BufferedImage generaImmagine() {
BufferedImage composizedImage = new BufferedImage(900, 900,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = composizedImage.createGraphics();
BufferedImage aThirdOfImage = null;
int whichThirdOfImageToSelect;
for (int i = 0; i < MAX_NUM_IMMAGINE; i++) {
whichThirdOfImageToSelect = (int) (Math.random() * 3);
switch (whichThirdOfImageToSelect) {
case 0:
aThirdOfImage = randomImages[i].getSubimage(0, 0, 900, 300);
break;
case 1:
aThirdOfImage = randomImages[i].getSubimage(0, 300, 900, 300);
break;
case 2:
aThirdOfImage = randomImages[i].getSubimage(0, 600, 900, 300);
break;
}
if (i == 0)
g.drawImage(aThirdOfImage, 0, 0, null);
else if (i == 1)
g.drawImage(aThirdOfImage, 0, 300, null);
else if (i == 2)
g.drawImage(aThirdOfImage, 0, 600, null);
}
g.dispose();
return composizedImage;
}
}
un' altra classe:
public void showFileChooser() throws IOException {
File selectedFile = null;
fileChooser = new JFileChooser();
// set selection mode to: "only dirrectory"
fileChooser.setFileSelectionMode(JFileChooser.DIRE CTORIES_ONLY);
int selectedDir = fileChooser.showOpenDialog(this);
if (selectedDir == JFileChooser.APPROVE_OPTION)
selectedFile = fileChooser.getSelectedFile();
gestore = new GestoreImmagine();
gestore.selectRandomImages(selectedFile);
enableSpinMenu();
}
public void enableSpinMenu(){
spin.setEnabled(true);
}
public void generaImmagine() {
generetedImg = gestore.generaImmagine();
panel.setImage(generetedImg);
//panel
}
scusate, manca un pezzettino
public class MyPanel extends JPanel {
private Image img;
public void setImage(Image _img) {
img = _img;
repaint();
}
public void paintComponet(Graphics _g) {
super.paintComponent(_g);
_g.drawImage(img, 0, 0, null);
}
}
In attesa di risposte...e inizio a documentarmi!
Ricordati i tag [ code][/code], l'indentazione del codice e un titolo più adeguato.
Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli
Un ImageObserver è un oggetto che è in grado di ricevere notifiche sull'aggiornamento di una immagine. Se la immagine la si visualizza su un componente grafico (es. JLabel), allora l'observer può essere proprio il componente!! (tutti i componenti AWT/Swing sono dei ImageObserver!!!).Originariamente inviato da @DI3GO@
Ma il metodo drawImage di Graphics richiede un ImageObserver che non ho capito come creare....
Ma puoi anche solo passare null se è una elaborazione che non viene presentata a video (o se è presentata solo dopo che la immagine è completa).
Ok, nel tuo post iniziale non si capiva bene che cosa volevi fare. Ora è un po' più chiaro.Originariamente inviato da logangt
ho 3 immagini:
A, B, C ne devo creare una immagine D cosi fatta
dividere le tre immagini in tre parti sceglierne 1 a caso e aggiungere la tessera alla immagine D
esempio
divido A in A1,A2,A3 e ne scelgo una tessera... alla fine D=(A2,B1,C3)esempio
Se hai una immagine A e in questa vuoi identificare 3 aree A1,A2,A3 tra cui scegliere per copiare una di queste nella immagine D, non devi per forza ottenere 3 subimage BufferedImage!!! Le aree (posizione e dimensione della "tessera" ... come l'hai chiamata tu) le scegli tu, no? Allora avrai 3 rettangoli (che puoi rappresentare con un Rectangle o con variabili "sciolte", vedi tu), quindi scegli il rettangolo e poi passi le coordinate a drawImage() del Graphics. Tutto qui.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
grazie per avere risp andbin,
vediamo se ho capito bene:
ho tre rettangoli, una per ogni sotto-immagine (A, B, C)
g2d=D.createGraphics()
g2d.drawImage(rect1,...);
g2d.drawImage(rect2,...);
g2d.drawImage(rect3,...);
Beh, drawImage non accetta un Rectangle.Originariamente inviato da logangt
vediamo se ho capito bene:
ho tre rettangoli, una per ogni sotto-immagine (A, B, C)
g2d=D.createGraphics()
g2d.drawImage(rect1,...);
g2d.drawImage(rect2,...);
g2d.drawImage(rect3,...);
g2d.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
Dove:
- img è una delle tue immagini (A/B/C)
- dx1/dy1 e dx2/dy2 sono i due angoli nella destinazione (D)
- sx1/sy1 e sx2/sy2 sono i due angoli nella sorgente (A/B/C)
- observer è l'ImageObserver, vedere quanto ho detto sopra
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
...non si smette mai di imparare....Originariamente inviato da andbin
Un ImageObserver è un oggetto che è in grado di ricevere notifiche sull'aggiornamento di una immagine. Se la immagine la si visualizza su un componente grafico (es. JLabel), allora l'observer può essere proprio il componente!! (tutti i componenti AWT/Swing sono dei ImageObserver!!!).
Un giorno di questi vorrò avere anche maggiori informazioni su come si ottiene quella dannata certificazione e quanto effettivamente è impegnativa...
Valida è valida, lo vedo al lavoro e lo vedo pure qui, ma davvero mi piacerebbe cimentarmi nell'impresa..una piccola soddisfazione personale....
Scusate OT!
Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli