Autore Topic: Copiare parte di una bitmap in un'altra  (Letto 812 volte)

Offline AlBeerTo

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Windows 7
Copiare parte di una bitmap in un'altra
« il: 16 Settembre 2010, 14:33:05 CEST »
0
Ciao a tutti,

come da Topic dovrei copiare parte di una bitmap (un riquadro di 1200x1200) in una nuova bitmap.
La prima viene caricata la SD, la seconda viene creata all'occorrenza.

Il codice che ho scritto è il seguente:

Codice (Java): [Seleziona]
Bitmap myTag = BitmapFactory.decodeFile("/sdcard/dcim/Camera/"+nameFile);
Bitmap FinalTag = Bitmap.createBitmap(1200, 1200, Bitmap.Config.ALPHA_8);

int x,y;
                                                       
for(y=0;y<1200;y++){
        for(x=0;x<1200;x++){
                FinalTag.setPixel(x, y, myTag.getPixel(x+430, y+225));
        }
}
                                                       
FinalTag.compress(Bitmap.CompressFormat.JPEG, jpgQuality, new FileOutputStream("/sdcard/dcim/Camera/square.jpg"));                                                     

Ma l'immagine risultate , square.jpg, risulta vuota (0 byte)...
Dov'è che sbaglio?

Grazie anticipatamente  :-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Copiare parte di una bitmap in un'altra
« Risposta #1 il: 16 Settembre 2010, 15:22:42 CEST »
0
Logcat non da nessun errore?

Offline AlBeerTo

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Windows 7
Re:Copiare parte di una bitmap in un'altra
« Risposta #2 il: 16 Settembre 2010, 15:26:44 CEST »
0
Logcat non da nessun errore?

No, sul logcat è tutto ok... Il file infatti viene creato, ma è vuoto.  :-(

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Copiare parte di una bitmap in un'altra
« Risposta #3 il: 16 Settembre 2010, 17:42:52 CEST »
0
Premesso che non ho mai lavorato con Bitmap in Android e che quindi potrei dire una cavolata: ma 1200x1200 non è forse troppo per le limitate possibilità del dispositivo? Giusto per levarci il dubbio potresti provare con un valore molto minore (ovviamente rimpicciolendo anche le dimensioni dell'area da ritagliare)?
È 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 Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Copiare parte di una bitmap in un'altra
« Risposta #4 il: 16 Settembre 2010, 19:24:50 CEST »
0
Credo proprio che effettivamente è un po' pesante come elaborazione, inoltre anche il metodo getPixel non credo sia molto leggero. Ma se il problema fosse quello ti beccheresti un errore di OutOfMemory

Offline AlBeerTo

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Windows 7
Re:Copiare parte di una bitmap in un'altra
« Risposta #5 il: 17 Settembre 2010, 08:55:29 CEST »
0
Infatti...

Provato con un riquadro di 120x120, ma il risultato è lo stesso: il file square.jpg è di 0 bytes.
Il fatto che il logcat non dica assolutamente nulla non aiuta...  :-(

Offline AlBeerTo

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Windows 7
Re:Copiare parte di una bitmap in un'altra
« Risposta #6 il: 17 Settembre 2010, 09:10:02 CEST »
0
Ok, ho capito dov'è il problema...


Codice (Java): [Seleziona]
Bitmap FinalTag = Bitmap.createBitmap(1200, 1200, Bitmap.Config.ALPHA_8);
Il Bitmap.Config deve essere "ARGB_8888".
Pensavo potesse convertire in maniera automatica, a quanto pare no...

Rimane il fatto che il processo è piuttosto lento.
Qualcuno conosce un modo per eseguire l'operazione in maniera più veloce? Magari lavorando direttamente sul byte array?

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:Copiare parte di una bitmap in un'altra
« Risposta #7 il: 17 Settembre 2010, 10:31:06 CEST »
+1
ciao.
Proprio ieri ho messo uno Snippets che utilizza proprio il metodo che ti serve.

Bitmap subImage = Bitmap.createBitmap(sourceBitmap, xStart, yStart, subImageWidth, subImageHeight);

Così ritagli una porzione di immagine delle dimensioni che ti servono, dal punto di partenza che ti serve.

^_^
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:Copiare parte di una bitmap in un'altra
« Risposta #8 il: 17 Settembre 2010, 10:46:50 CEST »
0
ciao.
Proprio ieri ho messo uno Snippets che utilizza proprio il metodo che ti serve.

Bitmap subImage = Bitmap.createBitmap(sourceBitmap, xStart, yStart, subImageWidth, subImageHeight);

Così ritagli una porzione di immagine delle dimensioni che ti servono, dal punto di partenza che ti serve.

^_^


Oddio, ma si poteva utilizzare il metodo createBitmap in questo modo? Non lo avevo capito...   :D

Grazie mille, ho provato così ed è estremamente più veloce del mio metodo pixel per pixel!!

Direi che il quesito è stato risolto... Grazie a tutti!  ;-)