Lorsque je créais une application qui lisait un fichier image et le traitait, je voulais parfois convertir divers formats d'image (jpeg, png, bmp, etc.) en classe Bitmap et le gérer. Au contraire, il y avait aussi des cas où vous vouliez compresser jpeg / png à partir de Bitmap ou le convertir en un tableau d'octets. Dans cet article, je noterai leur conversion mutuelle.
Dans cet article, afin de faire la distinction entre «** Bitmap class » et « image format bitmap » du SDK Android, le premier est « Bitmap » et le second est « bmp **». Il s'écrit ".
Bitmap.create Générez un Bitmap en spécifiant la taille verticale et horizontale de l'image et le format bmp dans Bitmap (). Copiez le tableau d'octets dans le contenu du Bitmap généré via ByteBuffer.
bmparr2bitmap.java
// bmparr(byte[])En supposant que les données d'image sont au format bmp
// width, height:Taille des données d'image
Bitmap bitmap = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bmparr));
Utilisez BitmapFactory.decodeByteArray (). Cette méthode décode les données compressées avec jpeg ou png en Bitmap. Il semble que le format bmp ne puisse pas être décodé ici.
jpegarr2bitmap.java
// jpgarr(byte[])En supposant que les données d'image sont dans un format compressé tel que jpeg ou png
Bitmap bitmap = BitmapFactory.decodeByteArray(jpgarr, 0, jpgarr.length);
Copiez la valeur dans ByteBuffer avec Bitmap.copyPixelsToBuffer () et extrayez le tableau d'octets de ByteBuffer.
bitmap2bmparr.java
// bitmap(Bitmap)Prémisse que les données d'image sont incluses dans
ByteBuffer byteBuffer = ByteBuffer.allocate(bitmap.getByteCount());
bitmap.copyPixelsToBuffer(byteBuffer);
byte[] bmparr = byteBuffer.array();
Compressez depuis Bitmap vers un format tel que jpeg / png avec Bitmap.compress () et passez-le à ByteArrayOutputStream. Extrayez le tableau d'octets de ByteArrayOutputStream.
bitmap2jpgarr.java
// bitmap(Bitmap)Prémisse que les données d'image sont incluses dans
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] jpgarr = baos.toByteArray();