|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Città: Santo Stefano Belbo
Messaggi: 216
|
[JAVA] ruotare immagine di 90 gradi
salve,
mi servirebbe aiuto su come ruotare un immagine di 90 gradi; nel programma prendo in input un file.yuv (ogni pixel ha su 8 bit l'informazione del suo colore in scala di grigi; un vettore della dimensione della risoluzione dell'immagine immagazzina per ogni pixel il suo valore) e lo stampo su consolle usando caratteri cercanco di dare l'impressione dell'immagine. La consegna richiede anche di stampare un negativo dell'immagine e di ruotarla di 90 gradi: bisognerebbe ottenerlo usando un vettore d'appoggio, al quale vengono passati i pixel in modo da ruotare l'immagine di 90 gradi; ma il massimo che ho ottenuto è stata l'immagine ruotata di 90 gradi, ma poi anche simmetrizzata rispetto all'asse y. Qualcuno riesce a indicarmi il giusto algoritmo di passaggio tra i due vettori (da picture[] a picture90[]? qui c'è un pezzo di codice: il primo metodo è la stampa normale, il secondo dovrebbe essere quella di rotazione. Codice:
if (risposta.compareTo("stampa") == 0)
for (int y=0; y<altezza; y++) {
for(int x=0; x<larghezza; x++) {
stampa (picture[(y*(int)altezza) + x]);
}
System.out.println();
}
else if (risposta.compareTo("ruota") == 0) {
int picture90[] = new int [(int)altezza * (int)larghezza];
for (int y=0; y<altezza; y++)
for(int x=0; x<larghezza; x++) {
picture90[(x*(int)larghezza)+y]=picture[y*(int)larghezza+x];
}
for (int y=0; y<altezza; y++) {
for(int x=0; x<larghezza; x++) {
stampa (picture90[(y*(int)altezza) + x]);
}
System.out.println();
}
}
l'intero progetto è disponibile qui ps: il nome del file da inserire è test.yuv le dimensioni sono 64 x 64
__________________
Ma ci sarà un souvenir, che ci riporterà solo certi momenti..E sarà un bel souvenir, una fotografia, una canzone fra i tempi..
Ma ci sarà un souvenir, che ci commuoverà fino a farci contenti..Tieniti il tuo souvenir, da mettere via poi ridicendoti "avanti".. [Ligabue, Sarà Un Bel Souvenir] Ultima modifica di Ciampa : 23-05-2009 alle 10:29. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Se questa è la stampa normale:
Codice:
public static void stampa(int[][] v) {
for (int i = 0; i < v.length; i++) {
for (int j = 0; j < v[i].length; j++) {
System.out.print(v[i][j]);
}
System.out.println();
}
}
Codice:
public static void stampaRuotata(int[][] v) {
for (int i = 0; i < v.length; i++) {
for (int j = 0; j < v[i].length; j++) {
System.out.print(v[v.length - j - ][i]);
}
System.out.println();
}
}
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Città: Santo Stefano Belbo
Messaggi: 216
|
quindi dovrei rivdere il programma mettendo una matrice al posto del vettore ?
__________________
Ma ci sarà un souvenir, che ci riporterà solo certi momenti..E sarà un bel souvenir, una fotografia, una canzone fra i tempi..
Ma ci sarà un souvenir, che ci commuoverà fino a farci contenti..Tieniti il tuo souvenir, da mettere via poi ridicendoti "avanti".. [Ligabue, Sarà Un Bel Souvenir] |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
No! ti ho fatto proprio un esempio che ti dovrebbe mostrare come la rappresentazione grafica (la stampa a video) e la struttura interna dove è memorizzato l'oggetto sono abbastanza indipendenti!
Premettendo che non ho letto il codice dell'intero progetto, tu hai un vettore? beh però per visualizzare l'immagine devi stamparlo a mò di matrice giusto? E per visualizzare l'immagine ruotata basta che quando stampi "mischi" un pò gli indici
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2005
Città: Santo Stefano Belbo
Messaggi: 216
|
scusa ma da un punto in poi non ti seguo: Ho capito che stampa su schermo e modo di immagazzinare i dati sono abbastanza indipendenti, ma non riesco a capire come applicare l'algoritmo hai postato al mio programma:
1. la tua funzione prendi cmq in ingresso una matrice int[][], io ho un vettore 2. nel mio programma, leggo ogni pixel dell'immagine e memorizzo nel vettore il suo valore da 0 a 255 in scala di grigi; la funzione stampa che vedi nel mio codice stampa '.', 'o', '*', 'A' a seconda che il valore sia più o meno alto, in modo da dare l'iilusione della sfumatura in bianco e nero 3. la trasformazione da applicare all'immagine sarebbe (considerando l'orientamento dell'asse y verso il basso) x'=y y'=larghezza -x io ho già provato a mischiare gli indici, ma praticamente nella funzione sarei arrivato a x'=y y'=x però non so come sistemare gli indici in modo corretto perchè ogni volta che ho provato mi dà errore, visto che esco dal limite del vettore scusa la cocciutaggine
__________________
Ma ci sarà un souvenir, che ci riporterà solo certi momenti..E sarà un bel souvenir, una fotografia, una canzone fra i tempi..
Ma ci sarà un souvenir, che ci commuoverà fino a farci contenti..Tieniti il tuo souvenir, da mettere via poi ridicendoti "avanti".. [Ligabue, Sarà Un Bel Souvenir] |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:22.



















