안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요~
제가 지금 어플을 하나 제작하고 있는데요~ 문제점이 있어 질문을 드립니다.
1px 을 mm 로 환산하는 문제인데요..
이게 안드로이드 같은 경우에는 해상도가 정말 다양하고 실질적인 dpi가 틀리기 때문에,
구하기가 쉽지가 않더라구요..
제가 구한 방법은 다음과 같습니다.
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
double deviceDPI = displayMetrics.densityDpi;
double mm = 25.4f / deviceDPI;
실제 1인치의 mm길이가 25.4mm 이기 때문에, 여기에다가 단말기의 dpi를 나누어 주게 되면 1px의 mm를 구할수 있을거라 생각했습니다.
그런데 예를들어, 갤럭시U 단말기(해상도 480*800) 같은 경우에 mm로 환산을 하면
0.10583333174387614mm 가 나오는데요~
이를 증명하기 위해 0.10583333174387614mm * 480(가로픽셀) 을 곱하면,
실제 단말기의 가로 사이즈인 48mm가 아니라 52mm 로 나오게 됩니다.
이 때문에, 한번 더 고민하여 생각한 방법은 실제 가로 dpi와 세로 dpi를 따로 구해 증명을 해보았습니다.
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
double deviceDPI = displayMetrics.xdpi;
double mm = 25.4f / deviceDPI;
똑같이, 갤럭시U의 실 가로 픽셀을 구하여 위와 같은 방법으로 증명을 해보려 하였으나,
25.4 / 실가로dpi(234.46153259277344) = 1px 당 약 0.10583333174387614mm 정도가 나옵니다
실 가로사이즈에 비교했을때도, 실제는 48mm 지만 계산방식으로 하게되면 52mm 정도가 나옵니다.
앱 성격상 1px의 정확한 mm 를 구해야 하는 상황입니다.
해상도별로 1px의 정확한 mm를 구할 수 있는 공식이나 조언 부탁드립니다. 감사합니다.
2012.12.18 16:19:16
예전에 이문제로 테스트를 해본적이 있는데 안드로이드의 API에서 얻어지는 값과, 제조사에서 공식적으로 내놓은 spec과 실제 실측을 한 값들이 조금씩 다 달라서 모델별로 실측값을 측정해서 사용했었습니다. 아마도 계산만으로 정확한 값을 뽑아내기는 쉽지 않을 것 같습니다.
제 생각엔 불가능할 것으로 보입니다. 화면크기가 같은 4인치라도 가로세로 비율이 다르고, 4인치때에 1280X720 픽셀이 있는가 하면 5인치에 800X480이 있는데 픽셀을 가지고 실제 mm단위 산출은 따로 제조사마다 제공해 주는 화면 실제 크기 스팩을 다 적용하지 않는 한 힘들것 같습니다. density 값도 결국은 property에 의해 제조사가 마음대로 정할 수 있습니다.