Je souhaite envoyer une télécopie à partir de mon application. Un document de télécopie a une résolution de 1728 x 2444 pixels. Donc je crée un bitmap, ajouter du texte et/ou des images et encodez à CCITT (Huffman):OutOfMemoryError lors de la création d'une image bitmap
Bitmap image = Bitmap.createBitmap(1728, 2444, Config.ALPHA_8);
Canvas canvas = new Canvas(image);
canvas.drawText("This is a fax", 100, 100, new Paint());
ByteBuffer buffer = ByteBuffer.allocateDirect(image.getWidth() * image.getHeight());
image.copyPixelsToBuffer(buffer);
image.recycle();
encodeCCITT(buffer, width, height);
Cela fonctionne parfaitement sur mon Galaxy SII (64 MB taille du tas), mais pas à l'émulateur (24 MB). Après avoir créé la deuxième page de fax, j'obtiens "une allocation externe de 4223232 octets trop grande pour ce processus ... java.lang.OutOfMemoryError" lors de l'allocation du tampon. J'ai déjà réduit la profondeur de couleur de ARGB_8888 (4 octets par pixel) à ALPHA_8 (1 octet), car les pages de fax sont de toute façon monochromes. J'ai besoin de cette résolution et j'ai besoin d'avoir accès aux pixels pour l'encodage.
Quel est le meilleur moyen?
Je l'ai résolu en réutilisant l'objet Bitmap. L'utilisation de recycle() ou la définition de null ne fonctionnait pas. – almisoft