Autore Topic: Fotogrammi animazione su una sola bitmap  (Letto 2508 volte)

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Fotogrammi animazione su una sola bitmap
« il: 16 Settembre 2010, 14:19:09 CEST »
+1
Per creare un'animazione, non è necessario utilizzare tante immagini quanti sono i fotogrammi dell'animazione (immaginate un'animazione con 500 fotogrammi... o_O), ma è possibile inserire tutti i fotogrammi all'interno di una sola immagine.
Supponiamo di avere una bitmap contenente tanti fotogrammi di 64x64, disposti a celle. La larghezza della stessa immagine deve essere un multiplo di 64 per contenere, su una riga, uno o più fotogrammi.

Inizializziamo il tutto:
Codice (Java): [Seleziona]
//questo si fa all'inizio, ed una sola volta
Bitmap framesBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.framesImage);
int frameWidth = 64;
int frameHeight = 64;
int framesInRows = framesBitmap.getWidth() / frameWidth; // numero di fotogrammi per riga

Ogni volta che dobbiamo passare al fotogramma successivo, ritagliamo il frame dall'immagine globale, e lo passiamo alla nostra imageView.

Codice (Java): [Seleziona]
//questo lo si fa ad ogni frame
int nFrame = 5; //numero del frame attuale nell'animazione (0......n)
               
int xStart = (nFrame % framesInRows) * frameWidth; //posizione y del frame nella bitmap
int yStart = (nFrame / framesInRows) * frameHeight; //posizione x del frame nella bitmap
               
Bitmap currFrame = Bitmap.createBitmap(framesBitmap, xStart, yStart, frameWidth, frameHeight); //estrai il frame
imageView.setImageBitmap(currFrame); //copi nella tua imageView

« Ultima modifica: 17 Settembre 2010, 16:10:31 CEST da 7h38ugg3r »
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline AlBeerTo

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Windows 7
Re:Fotogrammi animazione su una sola bitmap
« Risposta #1 il: 17 Settembre 2010, 10:44:35 CEST »
0
Sbagliato topic!  :-[

Grazie del codice comunque, mi è stato molto utile...

Offline FMSolution

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Google+
    • fabio.paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Mini
  • Play Store ID:
    FMsoluzioni
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:Fotogrammi animazione su una sola bitmap
« Risposta #2 il: 17 Settembre 2010, 12:10:52 CEST »
0
Ciao,

stavo facendo delle prove e ho notato che controllando le dimensioni delle immagini, con getWidth() e getHeight(), sono più piccole di quelle reali, questo crea dei problemi nel ritagliare le immagini.
Miei programmi: FMsoluzioni;

App sviluppate per conto terzi: TLS Travel; RadioNostalgia; 4Clubbers;

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Fotogrammi animazione su una sola bitmap
« Risposta #3 il: 17 Settembre 2010, 12:43:28 CEST »
0
Parliamo delle dimensioni della bitmap di partenza?

Potresti indicarmi le dimensioni originali e i valori che ti restituisce il sistema?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline FMSolution

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Google+
    • fabio.paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Mini
  • Play Store ID:
    FMsoluzioni
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:Fotogrammi animazione su una sola bitmap
« Risposta #4 il: 17 Settembre 2010, 12:52:38 CEST »
0
l'immagine originale è 880 x 880 px mentre le dimensioni che restituisce sono 587x587 px, diciamo che ridimensionando l'immagine in questa maniera:
Codice (Java): [Seleziona]
int width = framesBitmap.getWidth();
int height = framesBitmap.getHeight();
int newWidth = 880;
int newHeigth = 880;
               
//Calcolo il fattore di scala
float scaleWidth = ((float)newWidth) / width;
float scaleHeight = ((float)newHeigth) / height;
               
//Creo il matrix per la manipolazione
Matrix matrix = new Matrix();
//ridimensiono l'immagine
matrix.postScale(scaleWidth, scaleHeight);
               
//Ricreo la nuova Bitmap
resizeBitmap = Bitmap.createBitmap(framesBitmap,0,0,width,height,matrix,true);

il problema si risolve però è molto strano.
Miei programmi: FMsoluzioni;

App sviluppate per conto terzi: TLS Travel; RadioNostalgia; 4Clubbers;

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Fotogrammi animazione su una sola bitmap
« Risposta #5 il: 17 Settembre 2010, 13:02:54 CEST »
0
guarda che scalando l'immagine perdi in qualità, perché togli dettaglio (se la rimpicciolisci), oppure inserisci rumore (se la ingrandisci).

Tu provi solo nell'emulatore, è corretto?

adesso faccio delle prove, per capire cosa mi restituisce.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline FMSolution

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Google+
    • fabio.paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Mini
  • Play Store ID:
    FMsoluzioni
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:Fotogrammi animazione su una sola bitmap
« Risposta #6 il: 17 Settembre 2010, 14:25:07 CEST »
0
guarda che scalando l'immagine perdi in qualità, perché togli dettaglio (se la rimpicciolisci), oppure inserisci rumore (se la ingrandisci).

Si è vero ma le immagini che uso sono dei disegni vettoriali che vengono scalati di poco quindi si nota appena, la scocciatura, se si puo chiamare tale, è il passaggio in più che bisogna fare.

Tu provi solo nell'emulatore, è corretto?

purtroppo ancora si, sto valutando l'ipotesi appena posso economicamente procederò all'acquisto di un androidfonino.
Miei programmi: FMsoluzioni;

App sviluppate per conto terzi: TLS Travel; RadioNostalgia; 4Clubbers;

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Fotogrammi animazione su una sola bitmap
« Risposta #7 il: 17 Settembre 2010, 14:41:36 CEST »
+2
Credo di avere risolto il tuo problema.

Tu stai mettendo l'immagine contenente i frames in una delle cartelle drawable-hdpi/drawable-mdpi/drawable-ldpi, è corretto?
Credo che se non mantieni la stessa densità di immagine lui faccia un auto-scaling (o qualcosa di similare, comunque: provando a spostare l'immagine nelle 3 cartelle, mi da 3 dimensioni differenti).
Prova a creare una directory drawable, e metti lì la tua immagine: non effettua nessuno scaling e sei a posto.

 ;-)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline FMSolution

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Google+
    • fabio.paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Mini
  • Play Store ID:
    FMsoluzioni
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:Fotogrammi animazione su una sola bitmap
« Risposta #8 il: 17 Settembre 2010, 14:55:27 CEST »
0
Si infatti funziona perfettamente, non sapevo di questo meccanismo.

sei un grande,grazie mille per l'aiuto. ;-)
Miei programmi: FMsoluzioni;

App sviluppate per conto terzi: TLS Travel; RadioNostalgia; 4Clubbers;

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Fotogrammi animazione su una sola bitmap
« Risposta #9 il: 17 Settembre 2010, 15:39:44 CEST »
0

Codice (Java): [Seleziona]
//questo lo si fa ad ogni frame
int nFrame = 5; //numero del frame attuale nell'animazione (1......n)
               
int xStart = (int)(nFrame / framesInRows) * frameHeight; //posizione x del frame nella bitmap
int yStart = (((int)(nFrame % framesInRows))-1) * frameWidth; //posizione y del frame nella bitmap
 


forse mi sbaglio, ma mi sembra che le svariabili xStart e yStart siano scambiate.

xStart dovrebbe essere associato a framewidth, mentre yStart a frameheight.
Quindi, se i frame partissero da 0 (mi sembra più logico),il codice non dovrebbe essere così?:
Codice (Java): [Seleziona]
int xStart = (nFrame % framesInRows) * frameWidth;
int yStart = (nFrame / framesInRows) * frameHeight;
« Ultima modifica: 17 Settembre 2010, 16:08:13 CEST da Qlimax »

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Fotogrammi animazione su una sola bitmap
« Risposta #10 il: 17 Settembre 2010, 16:04:49 CEST »
0
Quoto qlimax, anche io ho pensato la stessa cosa.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Fotogrammi animazione su una sola bitmap
« Risposta #11 il: 17 Settembre 2010, 16:09:06 CEST »
0
si, effettivamente xStart e yStart hanno i nomi scambiati...correggo subito. (tra l'altro l'avevo detto che il codice era teorico e non l'avevo neanche provato  :-P)

Nel calcolo di xstart, il -1 serve per normalizzare la coordinata del primo frame della riga, che è appunto 0: io considero il primo fotogramma come 1, come cito nello snippet.

Mi accorgo, così, che nel calcolo di yStart ho invece considerato i frames che partono da 0.

Sistemo i conti.

grazie per l'osservazione.




7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/