Autore Topic: problema large bitmap  (Letto 1155 volte)

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
problema large bitmap
« il: 22 Febbraio 2014, 09:37:14 CET »
0
ciao a tutti,
ho un problemino relativo alle bitmap :(

volevo provare a modificare inserendo degli effetti alle mie foto caricate nel dispositivo

il primo problema nasce quando cerco di creare la mia bitmap
Codice (Java): [Seleziona]
Bitmap bmOut = Bitmap.createBitmap(src.getWidth() + 96, src.getHeight() + 96, Bitmap.Config.ARGB_8888);
mi dice che la dimensione è troppo grande, la mia bitmap è 2000x2300

saltando questo passaggio e provando ad analizzare la bitmap mi trovo in quest'altro problema

Codice (Java): [Seleziona]
            int width = source.getWidth();
            int height = source.getHeight();
            int[] pixels = new int[width * height];
            // get pixel array from source
            source.getPixels(pixels, 0, width, 0, 0, width, height);

l'istruzioen
Codice (Java): [Seleziona]
 int[] pixels = new int[width * height]; mi d'ha out of memery credo sempre dovuto al fatto delle dimensioni della mia bitmap

il primo problema nasce da
Codice (Java): [Seleziona]
int[] pixels = new int[width * height];


girando in rete ho trovato che e tramite la BitmapRegionDecoder posso suddividere virtualmente la mia bitmap ed analizzarla una parte per volta, fino a qui tutto ok
poi vengono i problemi una volta analizzate le singole parti della bitmap come la realizzo una bitmap sola???
« Ultima modifica: 22 Febbraio 2014, 09:43:46 CET da maverik1408 »
Maverik @ Google Play Store

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:problema large bitmap
« Risposta #1 il: 22 Febbraio 2014, 10:58:38 CET »
0
La limitazione è ben nota, e non esistono soluzioni "facili".

Guarda queste slide per una panoramica del problema e delle soluzioni possibili:
http://www.roard.com/Presentations/Devoxx2013-EfficientImageProcessing.pdf
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:problema large bitmap
« Risposta #2 il: 22 Febbraio 2014, 11:12:26 CET »
+1
Puoi ricavarti le dimensioni della immagine, senza allocare la memoria con questo codice.
Fondamentale il options.inJustDecodeBounds = true;

Codice (Java): [Seleziona]
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:problema large bitmap
« Risposta #3 il: 22 Febbraio 2014, 11:57:32 CET »
0
Puoi ricavarti le dimensioni della immagine, senza allocare la memoria con questo codice.
Fondamentale il options.inJustDecodeBounds = true;

Codice (Java): [Seleziona]
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;

Ok con questo posso prendere le dimensioni senza allocare memora ma poi come faccio per elaborare l'immagine e poi risalvarla 
Maverik @ Google Play Store

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:problema large bitmap
« Risposta #4 il: 22 Febbraio 2014, 17:54:39 CET »
0
Ok con questo posso prendere le dimensioni senza allocare memora ma poi come faccio per elaborare l'immagine e poi risalvarla
Beh capisco che trovare il codice già scritto è più semplice di leggere un pdf.
Ma se avessi letto il pdf suggerito da @bradipao avresti trovato anche la risposta a questa domanda.

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:problema large bitmap
« Risposta #5 il: 22 Febbraio 2014, 18:47:15 CET »
0
l'avevo letto :( :(

ma volevo solo qualche dritta non il codice
Maverik @ Google Play Store

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:problema large bitmap
« Risposta #6 il: 22 Febbraio 2014, 20:57:02 CET »
0

Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:problema large bitmap
« Risposta #7 il: 22 Febbraio 2014, 23:47:10 CET »
0
Ok ho capito come fare il load della bitmap senza allocare memoria ... ma come la salvo se non posso fare

Codice (Java): [Seleziona]
bitmap.createbitmap
Non riesco a capire questa cosa magari ovvia ma che io nn riesco a cede


Post unito: 23 Febbraio 2014, 12:13:54 CET
ho provato con
Codice (Java): [Seleziona]
BitmapFactory.decodeFile(filePath, options);
ma non va ... ho letto la guida e restituisce una bitmap "immutable" mentre io una volta aperta la devo poter modificare!!!

ho provato con

Codice (Java): [Seleziona]
mBitmap.copy(mBitmap.getConfig(),true);
ma ovviamente qui mi restituisce di nuovo OutOfMemory !!!

come posso risolvere!!!!

:( :(
« Ultima modifica: 23 Febbraio 2014, 12:13:54 CET da maverik1408, Reason: Merged DoublePost »
Maverik @ Google Play Store

Offline Ottavio

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:problema large bitmap
« Risposta #8 il: 24 Marzo 2014, 12:20:41 CET »
0
Loading Large Bitmaps Efficiently | Android Developers

Ciao a tutti,
ho anch'io lo stesso problema ed è veramente un pasticcio.  :'(
Nel link indicato sembra esserci una soluzione al problema, calcolando l'opzione inSampleSize e quindi caricando in memoria un'immagine ridotta (quindi qualitativamente inferiore).

La mia domanda è questa: io su quest'immagine caricata devo eseguire delle modifiche per poi pubblicarla. Se l'immagine è stata ridotta, il risultato finale è ridotto o le modifiche vengono apportate all'originale?

Grazie