2017-12-01 6 views
1

새로운 Android 프로젝트를 만들고 파일을 res/drawable 폴더에 넣었습니다. file 명령에 의해보고 된 그 통계는 다음과 같이됩니다. (크기의 1000x846)Android에서 jpg 리소스를로드 할 때 이미지 크기가 변경되는 이유는 무엇입니까?

map.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 200x200, segment length 16, baseline, precision 8, 1000x846, frames 3 

이 프로젝트는 최소 SDK 버전 (21) 및 (24)

내가 파일을 열 대상 SDK 버전을 사용 이 (코 틀린)와 같은 (인 뷰 서브 클래스) 내 클래스 :

mBitmap = BitmapFactory.decodeResource(resources, R.drawable.map) 
Log.i(TAG, "Our map's size is " + mBitmap.width + "x" + mBitmap.height) 

에뮬레이터에서 실행 (480X800 hdpi에는 API 레벨 25) 1500 비트 맵의 ​​크기를보고 x1269 또는 파일의 크기에서 1.5 배로 조정됩니다.

기기 (삼성 Galaxy A3, API 레벨 24)에서 실행하면 2000x1692 크기 또는 2x로 크기가보고됩니다.

왜 이런 일이 발생합니까? 로드 된 비트 맵의 ​​크기는 무엇에 달려 있습니까?

답변

0

(BTW, resources.getDrawable()Drawable.getIntrinsicWidth()를 통해 자원을 읽는 또 다른 방법은. 같은 크기를보고) 나는 새로운 안드로이드 프로젝트를 생성하고, 고해상도의 map.jpg 파일을 넣었습니다/드로어 블 폴더

디렉토리의 선택이 좋지는 않습니다.

에뮬레이터 (480x800 hdpi, API 수준 25)에서 실행하면 비트 맵의 ​​크기가 1500x1269로보고되거나 파일의 크기에서 1.5x로 조정됩니다.

기기 (삼성 Galaxy A3, API 레벨 24)에서 실행하면 2000x1692 크기 또는 2x로 크기가보고됩니다.

왜 이런 일이 발생합니까?

res/drawable/에 이미지를 넣었으므로 이 단어는 res/drawable-mdpi/의 동의어입니다. 이 이미지는 mdpi 화면 (약 160dpi) 용으로 설계되었다고합니다. 관련성 높은 동료 디렉토리 (예 : res/drawable-hdpi/)에이 리소스의 다른 변형이없는 경우 Android는 현재 사용중인 화면의 밀도를 수용하도록 리소스를 확장합니다. 에뮬레이터는 hdpi 구성입니다. 갤럭시 A3은 xhdpi 기기입니다.

이 이미지는 밀도에 따라 크기를 조정해서는 안되는 경우 res/drawable-nodpi/ 또는 res/drawable-anydpi/에 넣으십시오.

+0

감사합니다. 접미사가없는 버전이 'mdpi'의 동의어이며 따라서 크기가 조정된다는 것은 분명하지 않았습니다. 나는 자원의 "기본"원천으로서의 그것의 역할은 또한 "만져서는 안된다"는 것을 의미한다고 생각했다. – Arry

+0

@Arry : 아니요, 죄송합니다. 그 이유는 드로어 블 밀도의 개념이 안드로이드 1.5 또는 1.6까지 추가되지 않았기 때문입니다. Android 1.0 및 1.1에서는 모든 drawable이'res/drawable /'에있었습니다. 이전 버전과의 호환성을 위해 원래 안드로이드 장치에서 사용 된 밀도 인'mdpi'와 동의어로'res/drawable /'를 설정합니다. 이 규칙은 지난 몇 년 동안 거꾸로 호환성을 유지하기 위해 유지되었습니다.구글은 그것에 대해 많이 말하지 않고'res/drawable /'이 범용 목적을위한 것이라는 인상을주는 그들의 안드로이드 스튜디오 템플릿에서 어리석은 일을한다. – CommonsWare

관련 문제