Hi!Android. Wie schreibe ich Text auf ein wirklich großes Bild (Bitmap) und speichere das
Ist das folgende Problem: Ich muss einen langen Text auf einem ziemlich großen Bild schreiben und es dort speichern.
Bedingungen:
- Bildgröße über 3000 x 2000;
- Divide das Bild in Teile ist nicht erlaubt, weil der Text auf ein ganzes Bild von Kante zu Kante geschrieben werden.
- Hinzugefügt: Ich kann nicht die Bitmap-Skala oder Matrix-Skala verwenden, da es notwendig ist, Text auf dem Originalbild (in voller Größe) zu schreiben.
- Hinzugefügt: Als ich das Bild dem Benutzer zeigen, verwende ich Bitmap Skala:
options.inSampleSize = 10;
und keine Probleme mit fehlenden Speicher
Das aktuelle Problem:
Wenn ich versuche, Laden Sie dieses Bild in Bitmap-Fehler tritt bei der Begrenzung des Arbeitsspeichers (VM-Budget) auf. Fragen
:
- Wie auf einem großen Bild in Text, ohne sie in den Speicher zu laden?
- Können vorhandene Bibliotheken dafür?
Code-Beispiel:
// Step 1. Open image and load to Bitmap
Bitmap bitmap = BitmapFactory.decodeFile(fileName); // runtime Exception like "VM budget" !
// or
//Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.big_img_1); // as in previous runtime Exception like "VM budget" !
// or
//Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream); // as in previous runtime Exception like "VM budget" !
// Step 2. Write text
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(14);
Canvas canvas = new Canvas(bitmap);
canvas.drawText("some long long string over all image", 100, 100, paint);
// Step 3. Save bitmap to file
OutputStream fOut = new FileOutputStream(new File(fileName));
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
/*
_________________________________________________
| |
| |
| |
| |
| IMG |
| |
| |
| some long long string over all image |
|________________________________________________|
*/
Das Bild transparente Teile hat oder nicht? – Plato
nein transparent verwendet – Andrei
etwas Glück auf diesem einen? – Adrian