Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    26

    piccolo aiutino in java

    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: piccolo aiutino in java

    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
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: Re: piccolo aiutino in java

    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.
    No....ora sono io che non ho capito.
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    26
    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
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    26
    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);
    }
    }

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    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

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da @DI3GO@
    Ma il metodo drawImage di Graphics richiede un ImageObserver che non ho capito come creare....
    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!!!).

    Ma puoi anche solo passare null se è una elaborazione che non viene presentata a video (o se è presentata solo dopo che la immagine è completa).

    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
    Ok, nel tuo post iniziale non si capiva bene che cosa volevi fare. Ora è un po' più chiaro.

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    26
    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,...);

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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,...);
    Beh, drawImage non accetta un Rectangle.

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    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!!!).
    ...non si smette mai di imparare....
    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

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.