Salve. Sto cercando di disegnare un'immagine Bitmap su un canvas più alto di un tot. Questo perché devo poter condividere l'immagine su facebook dove sotto mostra delle informazioni aggiuntive (che vado a scrivere io sul canvas). Diciamo un po come quelle immagini di quelle applicazioni che mostrano il percorso svolto e sotto ci sono dati come km, calorie ecc.
1) Ottengo la mia Bitmap (catturo l'immagine dello schermo Android) e la salvo nel telefono.
2) Passo la bitmap al metodo che dovrebbe le opportune modifiche
3) Salvo il risultato nel telefono (sovrascrivo la bitmap originale in sostanza)
4) Avvio l'Intent per la condivisione
Codice:
codice: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 Bitmap bitmap = drawTextToBitmap(file); // salva il risultato nel telefono try { FileOutputStream out = new FileOutputStream("/mnt/sdcard/" + "MyMapScreen" + ".png"); // era MyNewMapScreen bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //I create the new file for the share File shareFile = new File("/mnt/sdcard/" + "MyMapScreen" + ".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); } } }La bitmap risultate sembra essere null, poiché ottengo NullPointerException a questa riga:codice:private Bitmap drawTextToBitmap(File file) { try { // ottengo la densità dello schermo Resources resources = getResources(); float scale = resources.getDisplayMetrics().density; Bitmap bitmap = BitmapFactory.decodeFile(file.getPath()); android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); // default bitmap if(bitmapConfig == null) { bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888; } // le bitmaps sono immutabili // allora è necessario convertirle in mutabili // bitmap mappa bitmap = bitmap.copy(bitmapConfig, true); // colore sfondo Paint backgroundPaint = new Paint(); backgroundPaint.setColor(Color.parseColor("#DDDDDD")); // creo la bitmap per lo sfondo, più alto di 200 pixel rispetto all'immagine della mappa catturata Bitmap bg = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight() + 200, Bitmap.Config.ARGB_8888); // rendo mutabile la bitmap bg = bg.copy(bitmapConfig, true); // creo il canvas su cui disegnare Canvas canvas = new Canvas(bg); // disegno un rettangolo sul canvas alla quale applico un colore grigio molto chiaro canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), backgroundPaint); // disegno l'immagine della mappa sul canvas canvas.drawBitmap(bitmap, 0, 0, null); // oggetto paint con antialiasing per il testo Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // text color (in base al tipo di mappa impostata) if(mapType == GoogleMap.MAP_TYPE_NORMAL || mapType == GoogleMap.MAP_TYPE_NONE || mapType == GoogleMap.MAP_TYPE_TERRAIN) { paint.setColor(Color.BLACK); } if(mapType == GoogleMap.MAP_TYPE_HYBRID || mapType == GoogleMap.MAP_TYPE_SATELLITE) { paint.setColor(Color.WHITE); } // dimensioni del testo in pixel paint.setTextSize((int) (20 * scale)); // text shadow (raggio, inclinazione sinistra, inclinazione destra, colore) paint.setShadowLayer(20, 0, 0, Color.RED); // font Typeface tf = Typeface.createFromAsset(getAssets(),"my_font.ttf"); paint.setTypeface(tf); // draw text to the Canvas center Rect bounds = new Rect(); // ROBA DOVE SCRIVO COSE return bitmap; } catch (Exception e) { return null; } }
O comunque ottengo la stessa eccezione se metto una stampa di Log della Bitmap prima dicodice:bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
salvarla nel telefono.

Rispondi quotando