43

MediaStore.Images.Media画像の幅を正常に取得できます

しかし、ドロップボックスから選択した画像から画像の幅と高さを取得する必要があります

現在、ドロップボックスから画像サイズを取得する次の方法があります

private void getDropboxIMGSize(Uri uri){
    String size = Long.toString(new File(uri.getPath()).length());
    return size;
}

しかし、実際に必要なのは、ファイルの幅と高さの値を取得することです

誰もそれを達成する方法を知っていますか?助けてください!

4

10 に答える 10

15

ほとんどの場合、Blackbelt の回答は をOptions使用して機能しますが、ExifInterface. 画像の URI がある場合はExifInterface、フル パスを使用して を作成できます。ビットマップ オブジェクトも も必要ありませんBitmapFactory.Options

元。

int width = exif.getAttributeInt( ExifInterface.TAG_IMAGE_WIDTH, defaultValue );
int height = exif.getAttributeInt( ExifInterface.TAG_IMAGE_LENGTH, defaultValue ); 
于 2016-01-20T00:56:49.470 に答える
3

new File(uri.getPath()).getAbsolutePath()解決策は代わりに使用されますuri.toString()

于 2013-05-08T13:07:51.430 に答える
2

@Blackbelt の回答に加えて、次のコードを使用して Uri からファイル パスを取得する必要があります。

public static String getPathFromURI(Context context, Uri contentUri) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT &&
            DocumentsContract.isDocumentUri(context, contentUri)) {
        return getPathForV19AndUp(context, contentUri);
    } else {
        return getPathForPreV19(context, contentUri);
    }
}

private static String getPathForPreV19(Context context, Uri contentUri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver().query(contentUri, projection, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        try {
            int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            return cursor.getString(columnIndex);
        } finally {
            cursor.close();
        }
    }

    return null;
}

@TargetApi(Build.VERSION_CODES.KITKAT)
private static String getPathForV19AndUp(Context context, Uri contentUri) {
    String documentId = DocumentsContract.getDocumentId(contentUri);
    String id = documentId.split(":")[1];

    String[] column = { MediaStore.Images.Media.DATA };
    String sel = MediaStore.Images.Media._ID + "=?";
    Cursor cursor = context.getContentResolver().
            query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    column, sel, new String[]{ id }, null);

    if (cursor != null) {
        try {
            int columnIndex = cursor.getColumnIndex(column[0]);
            if (cursor.moveToFirst()) {
                return cursor.getString(columnIndex);
            }
        } finally {
            cursor.close();
        }
    }

    return null;
}
于 2016-10-28T08:30:53.893 に答える
0

幅と高さが (0,0) になり続ける場合は、おそらくファイルではなくストリームをデコードする必要があります。

おそらく、アセットから画像を読み取ろうとしていることが原因です。これを試して:

val b = BitmapFactory.decodeStream(context.assets.open("path/in/assets/img.png"))
val width = b.width
val height = b.height
于 2020-12-01T15:59:32.450 に答える