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

    Programma da scrivere con Processing.Bloccato!!!!

    Ciao a tutti,
    devo scrivere un programmino con processing ma mi sta facendo diventare matto.Mi blocco in un punto.


    Il testo chiede di caricare un immagine da disco e creare un programma che abbia 2 modalità : mostra e modifica.In seguito alla pressione del tasto "m",il programma deve entrare in modalità "mostra" e visualizzare semplicemente l'immagine caricata (e sono riuscito a farlo).Premendo per la seconda volta il tasto "m",il programma entra in modalità "modifica".Deve suddividere l'immagine in 2 bande verticali.La divisione parte dal pixel mouseX-5,Y (Y,di logica, sarà uguale a quella del mouse,mouseY).
    La funzione creaImmagine() avrà una variabile locale color c che leggerà il pixel in esame e lo trasferirà in due funzioni,bandadestra() e bandasinistra(),che riceveranno entrambe in input una variabile locale color,estrarranno le tonalità RGB del pixel in esame, e le altereranno in due modi diversi.Uno da applicare alla banda destra e l'altro alla banda sinistra.Quindi,restituiranno entrambe i colori modificati,che verranno richiamati in creaimmagine().Alla banda sinistra verrà applicato il colore modificato da bandasinistra(),alla banda destra il colore di bandadestra().
    Successivamente,bisognerà richiamare creaImmagine() nella funzione predefinita draw(),che riceverà l'immagine,precedentemente caricata da disco, modificata da creaimmagine() e si comporterà nei modi elencati sopra alla pressione del tasto "m".
    L'effetto da creare è ovviamente che, al movimento infinito del mouse,l'immagine sarà sempre divisa in 2 bande verticali colorate in base a qual'è il pixel mouseX-5,che cambia in continuazione, e le bande possono ovviamente restringersi e allargarsi.per esempio se sposto il mouse verso sinistra,sarà più grande quella di destra e viceversa.


    Ho creato tutto il codice riguardante il caricamento dell'immagine da disco,setup,draw e le due funzioni bandasinistra() e bandadestra().
    Mi blocco nella funzione creaimmagine().Non riesco a dividere l'immagine in due e colorare.Suppongo si possa fare con dei cicli FOR nidificati,che controllino le coordinate di x e di y di entrambe le bande.Però non ci capisco più nulla.Non capisco se tutto dipende da una sola x e y,del punto in esame,o le bande abbiano entrambe le loro coordinate.Non capisco nemmeno come richiamare le due funzioni e colorare due intere bande in base al movimento del mouse.
    Per ora,dopo giorni di tentativi,visualizzo una sola banda,e non a colore fisso.Sposto il mouse e lampeggia di continuo.
    Se inserisco le coordinate per la seconda banda,il programma non restituisce errore ma non visualizzo più nulla.
    Potete darmi una mano con i cicli?


    P.S. Il testo dell'esercizio dice che addirittura si potrebbero colorare le due bande attraverso una sola funzione,che applichi ad ogni banda la sua alterazione di colore ma non ho capito come si fa.Quindi ho creato due funzioni separate.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se vuoi che qualcuno ti possa aiutare a capire dove sta il problema, dovresti postare un po' di codice... almeno la parte di codice che non ti funziona.
    Senza vedere nulla, nessuno potrà mai sapere cosa stai sbagliando...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Se vuoi che qualcuno ti possa aiutare a capire dove sta il problema, dovresti postare un po' di codice... almeno la parte di codice che non ti funziona.
    Senza vedere nulla, nessuno potrà mai sapere cosa stai sbagliando...

    Ciao.

    ok,non volevo allargare troppo il post.
    Escludendo la procedura per caricare l'immagine da disco,che mi funziona,inserisco le due funzioni e i cicli che sto provando a fare e non funzionano.Ci deve essere un casino enorme con le variabili e le coordinate.
    Impostato così,mi colora solo la parte a sinistra del mouse ma il colore non è fisso.Lampeggia durante lo spostamento.A destra non colora nulla.
    Come vedete,ho disattivato dei comandi.Se li attivo,non funziona nulla nemmeno a sinistra.

    codice:
    PImage img,img1;
    
    
    void setup() 
    {
      surface.setResizable(true);
      img= getImage(); 
      surface.setSize(img.width, img.height);
      
      image(img,0,0);
     
    }
    
    
    void draw()
    {
      if (key=='m')
      {
        noStroke();
        image(img,0,0);
      }
      else if (key=='g')
      {
       
       img1=creaimmagine(img);
       noStroke();
       image(img1,0,0);
       
      }
       
      }
    
    
    PImage creaimmagine(PImage img1)
    
    
    {
      int x0;int y0;int x1;int y1;int n_x=img.width;int n_y=img.height;
      color c,csx,cdx;
      c=img1.get(mouseX-5,mouseY);
      
      for(x0=0;x0<=mouseX-5;x0=x0+1)
      {
        for(y0=0;y0<=mouseX-5+n_y-1;y0=y0+1)
        { 
          //for(x1=mouseX-4;x1>n_x-mouseX-5;x1=x1+1)
          //{
            //for(y1=0;y1>=mouseX-4+n_y-1;y1=y1+1)
            //{
              c=img1.get(mouseX-5,mouseY);
              csx=calcolapixelsx(c);
              //cdx=calcolapixeldx(c);
              img1.set(x0,y0,csx);
              //img1.set(x1,y1,cdx);
            //}
          //}
        }
      }
      return img1;
    }
       
    color calcolapixelsx(color csx)
    {
      float r,g,b;
      
      r=red(csx);
      g=green(csx);
      b=blue(csx);
    
    
       if(((r*1.5)+10.0)>255.0)
       {
         r=255.0;
       } 
         else 
         {
           r=(r*1.5)+10.0;
         }
         
         if(((g*1.3)+20.0)>255.0)
         {
           g=255.0;
         }
           else
           {
             g=(g*1.3)+20.0;
           }
           
             if((b+50.0)>255.0)
             {
               b=255.0;
             }
               else
               {
                 b=b+50.0;
               }
        
      
      csx=color(r,g,b);
     
      return csx;
    }
    
    
    
    
    color calcolapixeldx(color cdx)
    {
      float r,g,b;
      float d;
      d=sqrt(((mouseX-mouseX-5)*(mouseX-mouseX-5))+((mouseY-mouseY)*(mouseY-mouseY)));
      
      r=red(cdx);
      g=green(cdx);
      b=blue(cdx);
      
      if((r-d)>255.0)
       {
         r=255.0;
       } 
         else 
         {
           r=r-d;
         }
         
         if((g-d)>255.0)
         {
           g=255.0;
         }
           else
           {
             g=g-d;
           }
           
             if((b-d)>255.0)
             {
               b=255.0;
             }
               else
               {
                 b=b-d;
               }
      
    
    
      cdx=color(r,g,b);
      
      return cdx;
    }
    Ultima modifica di LeleFT; 16-06-2017 a 15:10 Motivo: Aggiunti i tag CODE

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 © 2024 vBulletin Solutions, Inc. All rights reserved.