从URI获取图像宽度和高度

时间:2014-05-26 10:13:24

标签: android

是否可以从URI获取图像文件的宽度和高度。我试图使用此代码,但他们的错误: getAbsolutePath()

后面有语法错误

令牌上的语法错误")",无效的ArgumentList

private void getDropboxIMGSize(Uri uri){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(uri.getPath()).getAbsolutePath(), options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
}

3 个答案:

答案 0 :(得分:1)

这样做

public void getDropboxIMGSize(Uri uri) {
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(getAbsolutePath(uri), o);
        int imageHeight = o.outHeight;
        int imageWidth = o.outWidth;
    }



public String getAbsolutePath(Uri uri) {
        String[] projection = { MediaColumns.DATA };
        @SuppressWarnings("deprecation")
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }

答案 1 :(得分:1)

我遇到了同样的问题,我发现它是this answer的解决方案。你必须使用

BitmapFactory.decodeFile(new File(uri.getPath()).getAbsolutePath(), options);

代码中的代码:

BitmapFactory.decodeFile(uri.getPath()).getAbsolutePath(), options);

答案 2 :(得分:0)

如果将参数提取到局部变量中,则不太可能错过括号/包含额外的参数,并且读取代码会更容易。

在:

private void getDropboxIMGSize(Uri uri){
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(uri.getPath()).getAbsolutePath(), options);
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;
}

后:

private void getDropboxIMGSize(Uri uri){
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    String path = uri.getPath().getAbsolutePath();
    BitmapFactory.decodeFile(path, options);
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;
}

注意,您已将options.outHeightoptions.outWidth分配给局部变量,然后方法结束;你没有对这些价值做任何事情。