Newsgroup: it.comp.lang.c++
Titolo: array multidimensionale

Ciao a tutti
vorrei porvi un quesito: dovrei copiare un array monodimensionale in un
array bidimensionale con le seguenti regole;
copia le prime n cifre nella prima riga
passa alla seconda riga e ricopiaci la prima
passa alla terza riga e  copia le seconde n cifre
passa alla 4 riga e ricopiaci la terza .
Praticamente un array in due dimensioni in cui le righe sono a due a due
uguali.
Ora devo sucessivamente copiare questo array in un array monodimensionale di
dimensioni righe per colonne:
Io ho fatto cosě ma non funziona e non riesco a trovare l'errore (in pratica
devo zoomare un immagine di un fattore due)
const int n_righe= height;
const int n_colonne=width;
Pixel* zoomImage;
zoomImage=new Pixel[hegth*width]
for (int j=0;j<(height*width);j++)
 {
     zoomImage[j]=image[j];
    }
    //creo un'immagine di dimensioni doppie
 resize(2*n_righe,2*n_colonne);
 Pixel ArrayImage[1024][768];
 int r=0;
 int c=0;
 for(int k=0;k<n_colonne*n_righe;k++)
 {
  ArrayImage[r][2*c]=zoomImage[k];
     ArrayImage[r][2*c+1]=zoomImage[k];
  c++;
  if(c==n_colonne)
   r++;
         c=0;
  for(int t=0;t<n_colonne;t++)
  ArrayImage[r][2*c]=zoomImage[t];
     ArrayImage[r][2*c+1]=zoomImage[t];
  c++;
 }
      int s=0;
      for( r=0;r<height;r++)
    for(c=0;c<width;c++)
    {
     image[s]=ArrayImage[r][c]; // qui sforo dall'array secondo voi?
    s++;
    }
    }
Grazie a tutti

> (in pratica devo zoomare un immagine di un fattore due)
Guarda che cosi' al massimo raddoppi la dimensione verticale
dell'immagine (dovresti farlo anche per quella orizzontale).
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:796c568c653640432a3...@mygate.mailgate.org...


  }
Non bastava scrivere:
  Pixel ArrayImage[n_colonne][2 * n_righe];
  int r = 0;
  int c = 0;
  for(int i=0; i < n_colonne * n_righe; i ++){
     Pixel pxl = zoomImage[i];
     ArrayImage[r][2 * c] = pxl;
     ArrayImage[r][2 * c + 1] = pxl;
     c ++;
     if(c == n_colonne){
        r ++;
        c = 0;


Ok, vabbe', allora basta che 'giri' un attimo l'algoritmo per farlo
raddoppiare anche in orizzontale. Alla fine puoi pervenire ad un unico
ciclo for applicando un po' di zen..


 ha scritto nel messaggio
news:3e4a4d47e4e1aaf7b30...@mygate.mailgate.org...


 n_righe,int n_colonne)...
Il valore costante che si aspetta lui non e' quello che pensi te: deve
essere costante a compile-time!
Per esempio sono costanti:
#define dim 5
const int dim = 5;
5
Tutto il resto e' variabile.
Devi fare cosi':
Pixel * pArrayImage = new Pixel[2 * n_colonne][2 * n_righe];
Ricordati alla fine di deallocare il vettore con
delete [] pArrayImage;
Sostanzialmente il raddoppio che vuoi fare te funziona cosi':
Cella originaria:        Cella raddoppiata:
  __                       __ __
 |__|                     |__|__|
                          |__|__|
Siano le coordinate orizzontali e verticali definite rispettivamente da
(l'origine e' in alto a sinistra):
0 1
--->
e
|0
|1
V
Ora, quello che bisogna fare e' copiare la cella originaria in (0,0)
nelle celle (0,0), (1,0), (0,1) e (1,1).
Cioe':
//non potendo provare materialmente questo pezzo di codice non so se ha
errori; spero di no comunque :p
r = 0;
c = 0;
for(i = 0; i < n_colonne * n_righe; i ++){
   pxl = zoomImage[i];
   *pArrayImage[r][c] = pxl;
   *pArrayImage[r + 1][c] = pxl;
   *pArrayImage[r][c + 1] = pxl;
   *pArrayImage[r + 1][c + 1] = pxl;
   c += 2;
   if(c == n_colonne){
      //passa alle seconde due righe successive
      r += 2;


 ha scritto nel messaggio
news:226f3a2ee8ac2e8c9cf...@mygate.mailgate.org...


 che gli mando come si fa??
Esattamente cosi'! e non vedo perche' dovrebbe darti errore..
Magari nella definizione di Pixel, ma penso tu abbia fatto una cosa del
genere:
 struct Pixel{
    BYTE bRed;
    BYTE bGreen;
    BYTE bBlue;
    };
Magari nella definizione di resize..
Non riesco a capire. Ma, esattamente, cosa dice l'errore? (scrivi pure
il testo in inglese..)
Sono lieto di esserti stato d'aiuto.


Pixel * pArrayImage = new Pixel[2 * n_colonne][2 * n_righe];
Forse perchè sbagli la dichiarazione di un array multidimensionale in c++:
Pixel (* pArrayImage) [2*n_righe]= new Pixel[2 * n_colonne][2*n_righe];
Ad ogni modo, se vuoi che n_righe (n_righe deve essere costante), sia
variabile a run-time, ti consiglio di seguire un'altra strada che è quella
dei vector.
Guarda il thread postato poco precedentemente al tuo per maggiori
informazioni: "aiuto matrice tridimensionale dinamica"

> Pixel (* pArrayImage) [2*n_righe]= new Pixel[2 * n_colonne][2*n_righe];
Ma lo sai che c'hai propio ragione? Matrix, mi dovrai perdonare.. e' da
parecchio tempo che non lavoro piu' con le matrici.. dovro'
ricominciare, al piu' presto!


 ha scritto nel messaggio
news:8d8e3cc11f62f01dc96...@mygate.mailgate.org...
