这里已经讨论了很多问题,主要是不同的结果,并且由于API的变化和不同类型的URI,没有明确的答案.
我自己没有答案,但让我们谈谈它.该ExifInterface有一个接受一个构造函数filePath.这本身很烦人,因为现在不鼓励依赖路径 - 你应该使用Uris和ContentResolver.好.
我们的Uri名字uri可以从意图中检索出来onActivityResult(如果您从图库中选择图片ACTION_GET_CONTENT)或者可以是Uri我们之前拥有的(如果您从相机中选择图片并打电话intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)).
我们uri可以有两种不同的模式:
file://架构.那些很容易治疗,因为他们坚持这条道路.你可以打电话new ExifInterface(uri.getPath()),你就完成了.content://界面.我个人不知道那是什么,但让我发疯.据我所知,第二种情况应该用ContentResolver你能得到的东西来对待Context.getContentResolver().以下适用于我测试的所有应用程序,无论如何:
public static ExifInterface getPictureData(Context context, Uri uri) {
String[] uriParts = uri.toString().split(":");
String path = null;
if (uriParts[0].equals("content")) {
// we can use ContentResolver.
// let’s query the DATA column which …Run Code Online (Sandbox Code Playgroud) 我正在开发一个相机应用程序,基本上作为消息应用程序的一部分来附加图像等.该应用程序需要工作> = SDK 2.2和:
我不能像我喜欢的那样使用默认的Android相机,因为:
该应用程序的性质决定了图像不应该保存到磁盘,一些OEM(三星)喜欢这样做而不给你一个选择.
我无法调用任何其他相机应用程序可以拦截的意图,因为那时该应用程序可以保存图像.
我目前的问题是处理Android相机显然不喜欢纵向的事实.具体来说,经过一些挖掘后,我正在监控显示屏,并在轮换时调用setDisplayOrientation(90).这可以工作,但是surfaceview维度也需要更改,这必须在支持的维度内完成,否则参数设置会使应用程序崩溃.
我正在使用我在这里找到的另一个SO片段(getBestPreviewSize()方法)这样做,但它有一个明显的问题,我无法相信我没有找到其他人.
该部分takePicture的生命周期涉及调用PostView图片回调.这将显示当前暂停SurfaceView图像的静止图像,该图像将通过byteArray返回到原始和/或jpeg回调.我的问题是,这个图像在一些看似随机的测试设备上仍然存在偏差!因此,行为是用户以完美的4:3宽高比看到动态相机图像,直到他们拍摄照片并且他们呈现的图像被压扁.请注意,字节数组本身是正确的,当我Bitmap在消息传递端点构造它时,它显示正常,但这仍然是一个问题.
此时我无法看到如何改变静止图像显示.谁能帮我这个?
是否有任何第三方api for android从图像中读取exif标签,支持从1.5开始的api级别.
我有一个自定义相机应用程序。我需要自定义相机捕获的图像的元数据。我在解码字节数组(Constant.imageData1 = data;)之前保存了字节数据,并将其保存到字节类型的常量类中,在使用此字节数据之前,我将其转换为字符串。当我要使用 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) …Run Code Online (Sandbox Code Playgroud)