Pages: [1]   Go Down
Print
Author Topic: Progetto esame precedente  (Read 6874 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« on: 27-02-2009, 17:41:43 »

Come da oggetto, potreste postare un metodo particolare del progetto? Ossia quello relativo al metodo Funny. Grazie
Logged
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #1 on: 27-02-2009, 17:48:44 »

Prima di postarlo, prova a farlo, magari ti diamo un aiuto.
Puoi farlo o con l'Affine Transform ( il metodo migliore ) oppure facendo una raster dell'immagine e andando a modificare la matrice.
Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #2 on: 28-02-2009, 09:42:29 »

Io l'ho già fatto nel progetto precedente, solo che non era giusto lo avevo fatto in un altro modo; volevo vedere le differenze dal mio. Grazie
Logged
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #3 on: 01-03-2009, 11:32:09 »

Nel progetto precedente avevo fatto come segue:
Quote
public void Funny(){
       
        //Richiamo una funzione esterna DividiBlocchi a cui affido il partizionamento dell'immagine
        DividiBlocchi db=new DividiBlocchi();
       
        // Creo una matrice di BufferedImage in cui si posizionano i 100 rettangoli
        BufferedImage I_divisa [][]=db.Dividi(A);
       
        // Creo un'immagine risultato in modo che l'immagine di partenza non venga cancellata
        BufferedImage ris=new BufferedImage(A.getWidth(),A.getHeight(),BufferedImage.TYPE_INT_RGB);
        WritableRaster rC=ris.getRaster();
       
          int pixel[]=new int[A.getType()*10*10];
          //Array di Pixel dell'immagine iniziale di tipo RGB di lunghezza 10* 10 pixel= 100 pixel
         
       
        // For Annidati per scorrere la matrice
        for(int i=0;i<I_divisa.length;i++)
          {
           for(int j=0;j<I_divisa.length;j++)
               {
         
             
                try{
                  //Prelevo dalla matrice i pixel associati al rettangolo 10*10
                    I_divisa[j].getRaster().getPixels(0,0,10,10,pixel);
                    // SetPixels=setta i pixel nell'immagine risultato, dove 10*i e 10*j rappresentano lo spostamento dentro tale immagine
                     rC.setPixels((10*i),(10*j),10,10,pixel);
                }
                catch(ArrayIndexOutOfBoundsException e){}
              }
     
          }
         
       
       
       //L'immagine risultante da tale elaborazione viene qundi visualizzata in un frame a parte
       FrameFunny fn=new FrameFunny("Immagine Funny",ris);
        }// Fine metodo Funny

Funzione esterna DividiBlocchi: serve per dividere l'immagine in quadrati (a me nn venivano 100 rettangolini ma di più)
Quote
public class DividiBlocchi
{
  int h,w;
  int hpartizione;
  int wpartizione;
 
  public DividiBlocchi()
  {
    h=10; //Altezza blocchi
    w=10; //Larghezza blocchi
  }
 

 
  public BufferedImage[][] Dividi(BufferedImage I)
  {
     hpartizione=getHPartizione(I); // prendo il valore calcolato dal metodo getHPartizione
     wpartizione=getWPartizione(I); // prendo il valore calcolato dal metodo getWPartizione
     //Creo 
     BufferedImage ImmBlocchi [][]=new BufferedImage[wpartizione][hpartizione]; // Creo una nuova BufferedImage con i nuovi valori wpartizione e hpartizione
    int r=0,c=0;
    // Scorro la matrice con due cicli for annidati che lavorano dalla fine della matrice all'inizio, creando così l'effetto desiderato
    for(int i=wpartizione-1;i>=0;i--)
    {c=0;
       for(int j=hpartizione-1;j>=0;j--)
      {
        ImmBlocchi[j]=I.getSubimage(w*r,h*c,w,h);
        //SubImage= prende un blocco 10*10 tramite i due cicli, partendo dalla posizione iniziale dell'immagine e trasferendoli alla matrice
        c++;
    }
    r++;
  }
   
    return ImmBlocchi;
  }
       
  public int getHPartizione(BufferedImage I)
  {
    return (int)(I.getHeight()/100)*10; //restituisce un blocco che è la decima parte dell'altezza dell'immagine
  }
 
  public int getWPartizione(BufferedImage I)
  {
    return (int)(I.getWidth()/100)*10;  //restituisce un blocco che è la decima parte della larghezza dell'immagine
  }
   
   
  }

Questo metodo Funny è fatto agendo poi sui singoli pixel con il Raster.. Potete postare quello con l'AffineTransform?
Grazie
Logged
MissCooper
Apprendista Forumista
**
Offline Offline

Posts: 181



« Reply #4 on: 02-03-2009, 10:42:11 »

allora se non ho interpretato male non devi fare altro che applicare una rotazione di 180gradi ad ogni rettangolino che si ottiene dalla suddivisione dell'immagine in 100rettangoli...tra gli appunti che il prof ha lasciato on line c'è il codice per la rotazione...
Logged
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #5 on: 02-03-2009, 10:49:34 »

Code:

private void funny()
    {
    copiaImmagine(originale,immagine);
  riquadro(); //Crea riquadro
    rivolta();   //Rivolta i quadrati !!
    newFrame displayRisultato = new newFrame(immagine_funny,"Funny");
    pannello.setImage(originale);
        pannello.repaint();
        salva.setEnabled(true);
   
    } 
   
  //Crea i riquadri 10x10
  private void riquadro()
    {
       int w=immagine.getWidth();
       int h=immagine.getHeight();
     
       for(int x=0, i=0; (x+w/10)<=w; x=x+w/10, i++)
       for(int y=0, j=0; (y+h/10)<=h; y=y+h/10, j++)
           ritaglio[j][i]=immagine.getSubimage(x, y, w/10, h/10);
     }
 
//Rivolta tutti i quadrati
private void rivolta()
    {
    int w=ritaglio[0][0].getWidth();
    int h=ritaglio[0][0].getHeight();
    int [] copia = new int[3];
    int [] vecchio = new int[3];
   
    immagine_funny= new BufferedImage(w*10,h*10,BufferedImage.TYPE_INT_RGB );
        WritableRaster rasterFunny = immagine_funny.getRaster();
   
   
    for(int x=0; x<10; x++)
      for(int y=0; y<10; y++)
    for(int i=0;i<h; i++)
       for(int j=0; j<w; j++)
    {
    ritaglio[x][y].getRaster().getPixel(j, i, copia);
    ritaglio[x][y].getRaster().getPixel(w-j-1, h-i-1, vecchio);
    rasterFunny.setPixel(j+(w*y), i+(h*x), vecchio);
    rasterFunny.setPixel(w-j-1,h-i-1,copia);
    }
     // PER QUALCHE MOTIVO (??) NON FA IL PRIMO QUADRATO !!
           //  LO SETTO NUOVAMENTE
    for(int j=0;j<h; j++)
for(int i=0; i<w; i++)
    {
    ritaglio[0][0].getRaster().getPixel(i, j, copia);
    ritaglio[0][0].getRaster().getPixel(w-i-1, h-j-1, vecchio);
    rasterFunny.setPixel(i, j, vecchio);
    rasterFunny.setPixel(w-i-1,h-j-1,copia);
    }
   

   }


Eccolo !!

Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
bakks87
Apprendista Forumista
**
Offline Offline

Posts: 162


« Reply #6 on: 02-03-2009, 11:44:55 »

Ragazzi potreste postare un abbozzo di codice che disegni un GRAFICO?
Ci sarebbe parecchio d'aiuto a chi come me si sta esercitanto per il prossimo appello di Laboratorio.
Io ho provato a modificare la classe pannelloIstogramma che il prof.ha messo a disposizione nei suoi appunti, ma cambiando i drawLine e mischiando altre cose ho fatto solo troppa confusione. . .  cry
GRAZIE IN ANTICIPO
Logged
MissCooper
Apprendista Forumista
**
Offline Offline

Posts: 181



« Reply #7 on: 02-03-2009, 11:58:40 »

Il grafico dovrebbe essere così credo...il getHeight()/2 è perchè si richiedeva il livello dei pixel nella riga centrale...

Code:
public void graficocentrale(BufferedImage source)
    {
        JFrame frame= new JFrame();
        int[] red = source.getRaster().getSamples(0,source.getHeight()/2,source.getWidth(),1,0,(int[])(null));
        int[] green = source.getRaster().getSamples(0,source.getHeight()/2,source.getWidth(),1,1,(int[])(null));
        int[] blue = source.getRaster().getSamples(0,source.getHeight()/2,source.getWidth(),1,2,(int[])(null));;
        disegnalinee rosso= new disegnalinee(red);
        disegnalinee verde= new disegnalinee(green);
        disegnalinee blu= new disegnalinee(blue);
        frame.add(rosso,BorderLayout.NORTH);
        frame.add(verde, BorderLayout.CENTER);
        frame.add(blu, BorderLayout.SOUTH);
        rosso.setBackground(Color.RED);
        verde.setBackground(Color.GREEN);
        blu.setBackground(Color.BLUE);
        frame.setVisible(true);
        frame.setLocation(new Point(50,50));
        frame.setSize(new Dimension(900,600));
        rosso.setPreferredSize(new Dimension(300,200));
        verde.setPreferredSize(new Dimension(300,200));
        blu.setPreferredSize(new Dimension(300,200));
    }
Code:
class disegnalinee extends JPanel
{
    int[] x;
   
    disegnalinee(int[]a)
    {
        x=a;
    }
   
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2= (Graphics2D)g;
        g2.setStroke(new BasicStroke(2F));
        g2.setColor(Color.BLACK);
        for(int i=0; i<x.length-1; i++)
            g2.drawLine(i, x[i],i+1, x[i+1]);
    }
}

Logged
MissCooper
Apprendista Forumista
**
Offline Offline

Posts: 181



« Reply #8 on: 02-03-2009, 16:17:20 »

EDIT...ho preferito modificare il post perchè ho riguardato bene il codice che avevo postato per re-incollare l'immagine e...meglio togliere certi orrori sorry...work in progress...
« Last Edit: 02-03-2009, 19:06:06 by MissCooper » Logged
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #9 on: 02-03-2009, 16:50:35 »

Aigor ti ringrazio per il codice... Mi è stato utilissimo per capire cosa facesse esattamente tale metodo.. Una cosa sola ti volevo domandare: ritaglio[0[0] da dove li vai a prendere? Grazie
« Last Edit: 02-03-2009, 17:01:44 by vincenzo86 » Logged
Pages: [1]   Go Up
Print
Jump to: