|
|
@ -8,6 +8,7 @@ import android.graphics.Matrix; |
|
|
|
import android.hardware.Camera; |
|
|
|
import android.hardware.Camera; |
|
|
|
import android.os.Handler; |
|
|
|
import android.os.Handler; |
|
|
|
import android.support.annotation.UiThread; |
|
|
|
import android.support.annotation.UiThread; |
|
|
|
|
|
|
|
import android.support.annotation.WorkerThread; |
|
|
|
import android.support.media.ExifInterface; |
|
|
|
import android.support.media.ExifInterface; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
import java.io.ByteArrayInputStream; |
|
|
@ -55,6 +56,19 @@ public class CameraUtils { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Decodes an input byte array and outputs a Bitmap that is ready to be displayed. |
|
|
|
|
|
|
|
* The difference with {@link android.graphics.BitmapFactory#decodeByteArray(byte[], int, int)} |
|
|
|
|
|
|
|
* is that this cares about orientation, reading it from the EXIF header. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param source a JPEG byte array |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
@SuppressWarnings("WeakerAccess") |
|
|
|
|
|
|
|
@WorkerThread |
|
|
|
|
|
|
|
public static void decodeBitmap(final byte[] source) { |
|
|
|
|
|
|
|
decodeBitmap(source, Integer.MAX_VALUE, Integer.MAX_VALUE); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Decodes an input byte array and outputs a Bitmap that is ready to be displayed. |
|
|
|
* Decodes an input byte array and outputs a Bitmap that is ready to be displayed. |
|
|
|
* The difference with {@link android.graphics.BitmapFactory#decodeByteArray(byte[], int, int)} |
|
|
|
* The difference with {@link android.graphics.BitmapFactory#decodeByteArray(byte[], int, int)} |
|
|
@ -100,9 +114,21 @@ public class CameraUtils { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Decodes an input byte array and outputs a Bitmap that is ready to be displayed. |
|
|
|
|
|
|
|
* The difference with {@link android.graphics.BitmapFactory#decodeByteArray(byte[], int, int)} |
|
|
|
|
|
|
|
* is that this cares about orientation, reading it from the EXIF header. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* The image is also downscaled taking care of the maxWidth and maxHeight arguments. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param source a JPEG byte array |
|
|
|
|
|
|
|
* @param maxWidth the max allowed width |
|
|
|
|
|
|
|
* @param maxHeight the max allowed height |
|
|
|
|
|
|
|
*/ |
|
|
|
// TODO ignores flipping
|
|
|
|
// TODO ignores flipping
|
|
|
|
@SuppressWarnings({"SuspiciousNameCombination", "WeakerAccess"}) |
|
|
|
@SuppressWarnings({"SuspiciousNameCombination", "WeakerAccess"}) |
|
|
|
/* for tests */ static Bitmap decodeBitmap(byte[] source, int maxWidth, int maxHeight) { |
|
|
|
@WorkerThread |
|
|
|
|
|
|
|
public static Bitmap decodeBitmap(byte[] source, int maxWidth, int maxHeight) { |
|
|
|
if (maxWidth <= 0) maxWidth = Integer.MAX_VALUE; |
|
|
|
if (maxWidth <= 0) maxWidth = Integer.MAX_VALUE; |
|
|
|
if (maxHeight <= 0) maxHeight = Integer.MAX_VALUE; |
|
|
|
if (maxHeight <= 0) maxHeight = Integer.MAX_VALUE; |
|
|
|
int orientation; |
|
|
|
int orientation; |
|
|
|