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

    domanda di grafica [eviterei gli applet se possibile]

    Salve! avrei bisogno di poter disegnare [e di visualizzare] un'immagine 'pixel a pixel' con la possibilita` di scegliere ogni volta il colore del pixel . Tutto questo in un'applicazione e non in un applet.
    nello specifico dovrei visualizzare un'immagine dell'ordine dei 1000X1000 pixel.
    ho provato a scartabellare tra le varie guide, ma non sono riuscito a capire bene.
    qualcuno potrebbe aiutarmi? anche consigliandomi una buona guida .
    se qualcosa puo` andare storto lo fara`

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

    Re: domanda di grafica [eviterei gli applet se possibile]

    Originariamente inviato da fabio.gentile
    avrei bisogno di poter disegnare [e di visualizzare] un'immagine 'pixel a pixel' con la possibilita` di scegliere ogni volta il colore del pixel . Tutto questo in un'applicazione e non in un applet.
    nello specifico dovrei visualizzare un'immagine dell'ordine dei 1000X1000 pixel.
    ho provato a scartabellare tra le varie guide, ma non sono riuscito a capire bene.
    qualcuno potrebbe aiutarmi? anche consigliandomi una buona guida .
    Una normale applicazione "desktop" va benissimo.

    Dovresti realizzare un "tuo" componente, che poi alla fin fine, nel senso più semplice possibile, vuol dire che dovresti estendere tipicamente JComponent o JPanel dentro cui, nel paintComponent() disegnerai la immagine.

    Visto che l'utente deve poter "disegnare", ci deve essere un qualcosa su cui mantenere in modo "permanente" tutte le modifiche. E questo vuol dire che dovresti creare una immagine di 1000x1000 pixel. Ogni volta che, a seguito di un evento (del mouse, suppongo) si vuole disegnare, tu disegni prima sulla immagine, poi invochi un repaint(.....) chiedendo il ridisegno solo di quella porzione (per maggiori performance) modificata.
    Quando verrà invocato il paintComponent(), il tuo codice che implementi qui dentro semplicemente "butterà" a video la immagine pari-pari.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    MMM, non credo di aver capito bene, potresti dirmi se e` giusto cio` che ho capito:

    1. creo una classe che estende, ad esempio un pannello awt;
    2. creo un'immagine [come?];
    3. disegno un primo elemento, ad esempio il primo pixel in alto a destra [come?];
    4. i restanti pixel li disegno con repaint() [come la implemento?];
    5. mando sul pannello o comunque sulla mia "piattaforma" l'immagine con paintComponent();


    fa conto che l'applicazione che sto sviluppando chiede all'utente pochi dati(le coordinate di un punto su un piano complesso ) che attraverso dei processi matematici mi restituisce un array 1000X 1000 di interi di cui
    ciascun elemento mi rappresenta un punto del piano complesso, mentre il numero che contiene dev'essere "proporzionale" al colore che deve avere.
    se qualcosa puo` andare storto lo fara`

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fabio.gentile
    1. creo una classe che estende, ad esempio un pannello awt;
    Se possibile, evita AWT .... usa Swing! Quanto ho detto prima e dirò adesso sul paintComponent() vale solo per Swing.

    Originariamente inviato da fabio.gentile
    2. creo un'immagine [come?];
    Basta un java.awt.image.BufferedImage, vedi il secondo costruttore BufferedImage(int width, int height, int imageType)

    imageType va bene che sia TYPE_INT_RGB.

    Originariamente inviato da fabio.gentile
    3. disegno un primo elemento, ad esempio il primo pixel in alto a destra [come?];
    Ottieni il Graphics2D dal BufferedImage (createGraphics() ) e ... disegni. Vedi tutti i metodi di painting in Graphics/Graphics2D.
    Quando finito con il Graphics2D ne va fatto il dispose().

    Originariamente inviato da fabio.gentile
    4. i restanti pixel li disegno con repaint() [come la implemento?];
    No. repaint() fa solo una richiesta "asincrona" di disegno. Appena il controllo ritornerà al framework, si accorgerà che c'è una richiesta di disegno e scatenerà tutta la fase di painting. Che ad un certo punto farà invocare il paintComponent() sul componente.

    Originariamente inviato da fabio.gentile
    5. mando sul pannello o comunque sulla mia "piattaforma" l'immagine con paintComponent();
    Sì, paintComponent(Graphics g) è il metodo che rappresenta il vero "contesto" di disegno del componente.
    Generalmente si fa all'inizio, per prima cosa, un super.paintComponent(g); se, tipicamente, il proprio codice non "copre" tutta la superficie del componente. Poi si può disegnare tutto quello che si vuole.

    Originariamente inviato da fabio.gentile
    fa conto che l'applicazione che sto sviluppando chiede all'utente pochi dati(le coordinate di un punto su un piano complesso ) che attraverso dei processi matematici mi restituisce un array 1000X 1000 di interi di cui
    ciascun elemento mi rappresenta un punto del piano complesso, mentre il numero che contiene dev'essere "proporzionale" al colore che deve avere.
    Io, non so perché, avevo capito che dovevi fare una specie di disegno "a mano libera" (ma avevo sicuramente capito male io!!).

    Chiaramente, come hai detto adesso è un pochino diverso. E anzi ... mi rimangio quanto ho detto perché se la immagine, una volta creata, la devi solo visualizzare e basta (più nessuna modifica successiva) l'approccio migliore sarebbe un altro. Ma bisognerebbe analizzare meglio la questione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.