【发布时间】:2016-07-12 06:31:44
【问题描述】:
我有一个自定义相机应用程序。我需要自定义相机捕获的图像元数据。我在 decodebytearray (Constant.imageData1 = data;) 之前保存了字节数据,并将其保存到类型为 byte 的常量类中,在使用此字节数据之前,我将其转换为字符串。当我要使用 ExifInterface 执行它并将其显示到日志中时,应用程序崩溃了。
这是我的 OnPictureTaken 方法:
PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Constant.imageData1 = data;
Log.e("Camrera", "22222222222222222");
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inDither = false;
// bfo.inJustDecodeBounds = true;
bfo.inPurgeable = true;
bfo.inTempStorage = new byte[16 * 1024];
Intent intent = new Intent(context, PreviewActivity.class);
// intent.putExtra("data", data);
Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0,
data.length, bfo);
Matrix matrix = new Matrix();
if (Constant.result == 180) {
matrix.postRotate(270);
}
if (Constant.result == 270) {
matrix.postRotate(180);
}
int height = bitmapPicture.getHeight();
int width = bitmapPicture.getWidth();
//Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapPicture,
//height, width, true);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmapPicture, 0, 0,
bitmapPicture.getWidth(), bitmapPicture.getHeight(), matrix,
true);
ByteArrayOutputStream blob = new ByteArrayOutputStream();
Log.e("Camrera1", "22222222222222222");
rotatedBitmap.compress(CompressFormat.JPEG,
50 /* ignored for PNG */, blob);
byte[] bitmapdata = blob.toByteArray();
Constant.imageData = bitmapdata;
Log.e("Camrera2", "22222222222222222");
startActivity(intent);
}
};
这是我的执行代码:
private void SaveImage() {
try {
String data = byteArrayToString(Constant.imageData1);
ExifInterface ex = new ExifInterface(data);
String make = ex.getAttribute(ExifInterface.TAG_MAKE);
Log.e("Make", make);
Log.e("Make", make);
Log.e("Make", make);
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
而bytearraytostring方法是:
public static String byteArrayToString(byte[] bytes)
{
return new String(bytes);
}
这对我来说非常重要。请帮帮我。
【问题讨论】:
-
为什么你需要Exif信息,只是因为图像旋转,或者其他?让我知道我做过同样的工作,会指导你。
-
@RDC,实际上我需要这个,因为我必须在 logcat(log.e) 中显示该图像的“MAKE、MODEL 和 FOCAL LENGTH”。
-
好的,您可能需要使用 3rd pary api 来从字节数组中获取 Image Exif 元数据.. 这里stackoverflow.com/questions/12944123/…
-
@RDC,我不想使用第三方 api,还有其他方法可以得到吗??????请帮帮我。
-
遗憾的是,Android Api 不允许您从字节数组 Stream 中读取 exif 数据,只能从文件中读取。因此您必须将字节数组写入文件,然后才能读取 Exif 信息。
标签: android metadata android-camera exif