Autore Topic: Aggiungere zona colorata ad una Bitmap  (Letto 677 volte)

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Aggiungere zona colorata ad una Bitmap
« il: 13 Agosto 2014, 10:07:54 CEST »
0
Credo di aver già chiesto una cosa del genere senza ricevere risposta. Ora riprovo  :-P

Questi sono i passaggi che sto cercando di fare:

1) Ottenere l'immagine della mappa di Google e salvarla nel telefono. OK
2) Prendere l'immagine del punto 1 ed aggiungervi uno spazio in basso di tot pixel sulla quale scrivere dei dati. NON PROPRIO RIUSCITO
3) Condividere il risultato sui social network. OK

Il punto 2 non è proprio riuscito, perché per come è il codice ora, la zona che aggiungo in basso mi taglia l'immagine in alto, quando in realtà vorrei
che l'immagine risultasse proprio più lunga con uno spazio aggiuntivo sotto.

Qui di seguito il codice:

Codice: [Seleziona]
public void shareTrack(View v) {

    if(NOTHING) {
        return;
    }

    // sposta la visuale sul tracciato e visualizza lo start
    // nascondo i markers centrali
    if(PATH_MARKERS) {
        for (int i = 1; i < mMarkersList.size() - 1; i++) {
            mMarkersList.get(i).setVisible(false);
        }
    }

    // cattura e salva l'immagine della mappa
    CaptureMapScreen();

    // crea e salva nel telefono l'immagine catturata della mappa
    File file = new File("/mnt/sdcard/" + "MyMapScreen" + ".png");

    // crea il bitmap a partire dall'immagine della mappa aggiungendo
    // informazioni varie
    Log.d(TAG_LOG, "file space: " + file.getTotalSpace());
    Bitmap bitmap = drawTextToBitmap(file);

    // salva il risultato nel telefono
    try {
        FileOutputStream out = new FileOutputStream("/mnt/sdcard/"
               + "MyNewMapScreen" + ".png"); // era MyNewMapScreen
        bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.flush();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // creates the new file for the share
    File shareFile = new File("/mnt/sdcard/"
                + "MyNewMapScreen" + ".png"); // era MyNewMapScreen

    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("image/png");
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(shareFile));
    startActivity(Intent.createChooser(shareIntent, "Share"));

    //Ripristino la visibilità dei Markers
    if(PATH_MARKERS) {
        for (int i = 1; i < mMarkersList.size() - 1; i++) {
            mMarkersList.get(i).setVisible(true);
        }
    }
}

Codice: [Seleziona]
private Bitmap drawTextToBitmap(File file) {
     // ottengo la densità dello schermo
     Resources resources = getResources();
     float scale = resources.getDisplayMetrics().density;

     BitmapFactory.Options options = new BitmapFactory.Options();
     options.inPreferredConfig = Bitmap.Config.ARGB_8888;
     // bitmap del file nel telefono
     Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), options);

     // bitmap più alta di 200 pixel
     int newHeight = bitmap.getHeight() + 200;
     Bitmap highterBitmap = Bitmap.createBitmap(bitmap.getWidth(), newHeight, bitmap.getConfig());
     Canvas canvas = new Canvas(highterBitmap);
     canvas.drawColor(Color.WHITE);
     canvas.drawBitmap(bitmap, 0, -200, null); // non credo di averne capito il funzionamento, ma è questo che taglia l'immagine e fa apparire lo spazio
     ...

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Aggiungere zona colorata ad una Bitmap
« Risposta #1 il: 13 Agosto 2014, 10:18:36 CEST »
0
beh certo che taglia, disegni la bitmap vecchia sul canvas a partire dal punto 0,-200, cioè parti 200punti sopra al limite visibile del canvas, ovviamente non è tagliata, ma spostata!
cambia quel -200 in 0 e tutto dovrebbe andare bene. Ovviamente lo spazio a disposizione si dimezza, se tieni tutto a 200 com'è
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Aggiungere zona colorata ad una Bitmap
« Risposta #2 il: 13 Agosto 2014, 10:27:11 CEST »
0
Allora, quel -200 deriva da tentativi vari. Se metto 0 l'immagine appare normale come all'inizio, senza alcuno spazio aggiuntivo, e non capisco perché. Dovrei aver creato una nuova Bitmap più alta di 200 pixel e ci associo il canvas!

No aspetta non è vero, sembra funzionare anche se l'area bianca che appare non è di 200 pixel ma molto meno.

No ok risolto, lol. Vorrei solo un parere ora. Dovrei mettere tutto dentro un AsyncTask? Dalla cattura all'elaborazione? E poi far partire la condivisione dell'onPostExecute? Perché non è particolarmente veloce...
« Ultima modifica: 13 Agosto 2014, 10:34:02 CEST da Elmvor »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Aggiungere zona colorata ad una Bitmap
« Risposta #3 il: 13 Agosto 2014, 12:30:09 CEST »
+1
Allora, quel -200 deriva da tentativi vari. Se metto 0 l'immagine appare normale come all'inizio, senza alcuno spazio aggiuntivo, e non capisco perché. Dovrei aver creato una nuova Bitmap più alta di 200 pixel e ci associo il canvas!

No aspetta non è vero, sembra funzionare anche se l'area bianca che appare non è di 200 pixel ma molto meno.

No ok risolto, lol. Vorrei solo un parere ora. Dovrei mettere tutto dentro un AsyncTask? Dalla cattura all'elaborazione? E poi far partire la condivisione dell'onPostExecute? Perché non è particolarmente veloce...
Infatti (se non sbaglio) il 200 dovrebbe essere DP, c'è una nota:
Citazione
If the bitmap and canvas have different densities, this function will take care of automatically scaling the bitmap to draw at the same density as the canvas.

ad ogni modo, tieni conto che se ci mette più di 4 secondi a rispondere all'utente arriva un messaggio, quindi o ti assicuri che anche coi peggiori device e con le piu pesanti immagini ci metta poco, oppure fai l'async task (io lo farei comunque)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Aggiungere zona colorata ad una Bitmap
« Risposta #4 il: 13 Agosto 2014, 12:55:33 CEST »
0
Ok perfetto, allora la discussione è risolta, ti ringrazio  ;-)