Wenn ich eine App erstellte, die eine Bilddatei liest und verarbeitet, wollte ich manchmal verschiedene Bildformate (JPEG, PNG, BMP usw.) in die Bitmap-Klasse konvertieren und damit umgehen. Im Gegenteil, es gab auch Fälle, in denen Sie jpeg / png aus Bitmap komprimieren oder in ein Byte-Array konvertieren wollten. In diesem Artikel werde ich ihre gegenseitige Bekehrung notieren.
In diesem Artikel wird zur Unterscheidung zwischen "** Bitmap-Klasse " und " Bildformat-Bitmap " des Android SDK " Bitmap " und letzteres " bmp **" verwendet. Es ist geschrieben als ".
Bitmap.create Generieren Sie Bitmap, indem Sie die vertikale und horizontale Größe des Bildes und das BMP-Format in Bitmap () angeben. Kopieren Sie das Byte-Array über ByteBuffer in den Inhalt der generierten Bitmap.
bmparr2bitmap.java
// bmparr(byte[])Angenommen, die Bilddaten liegen im BMP-Format vor
// width, height:Bilddatengröße
Bitmap bitmap = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bmparr));
Verwenden Sie BitmapFactory.decodeByteArray (). Diese Methode decodiert mit JPEG oder PNG komprimierte Daten in Bitmap. Es scheint, dass das BMP-Format hier nicht dekodiert werden kann.
jpegarr2bitmap.java
// jpgarr(byte[])Angenommen, die Bilddaten haben ein komprimiertes Format wie JPEG oder PNG
Bitmap bitmap = BitmapFactory.decodeByteArray(jpgarr, 0, jpgarr.length);
Kopieren Sie den Wert mit Bitmap.copyPixelsToBuffer () in ByteBuffer und extrahieren Sie das Byte-Array aus ByteBuffer.
bitmap2bmparr.java
// bitmap(Bitmap)Voraussetzung ist, dass Bilddaten enthalten sind
ByteBuffer byteBuffer = ByteBuffer.allocate(bitmap.getByteCount());
bitmap.copyPixelsToBuffer(byteBuffer);
byte[] bmparr = byteBuffer.array();
Komprimieren Sie mit Bitmap.compress () von Bitmap in ein Format wie jpeg / png und übergeben Sie es an ByteArrayOutputStream. Extrahieren Sie das Byte-Array aus dem ByteArrayOutputStream.
bitmap2jpgarr.java
// bitmap(Bitmap)Voraussetzung ist, dass Bilddaten enthalten sind
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] jpgarr = baos.toByteArray();