안드로이드 픽셀 변환에 대한 연구(一)

기본 개념 1.px(pixels):픽셀
드로잉의 기본 요소입니다.우리가 말하는 화면 해상도는 픽셀을 가리킨다.만약 휴대전화의 해상도가 480*800이라면 휴대전화의 폭은 480개의 화소이고 길이는 800개의 화소이다.이 화소는 고정되어 있다.선을 0, 0에서 240400 픽셀 단위로 그리면 왼쪽 상단에서 화면 중간까지의 선이 됩니다.
 
2.dpi(Dots Per Inch): 픽셀 밀도
라는 약자를 썼다.인치당 인쇄되는 점 또는 선 수입니다.
DPI는 원래 인치당 인쇄할 수 있는 점포수(Dot Per Inch)를 뜻하는 인쇄상의 기량 단위였다.그러나 디지털 입력으로 출력 장비가 빠르게 발전하면서 대다수 사람도 디지털 영상의 해상도를 DPI로 표시하지만, 비교적 엄격한 사람들은 인쇄할 때 계산하는 점포(Dot)와 컴퓨터 모니터의 디스플레이 픽셀(Pixel)이 같지 않다는 것을 알아차릴 수 있기 때문에 전문적인 사람들은 PPI(Pixel Per Inch)로 디지털 영상의 해상도를 표시해 양자를 구분한다.
고정된 사이즈마다 몇 개의 픽셀이 있는지 간단하게 이해할 수 있다.예를 들어 같은 픽셀이 작은 사이즈에 표시될수록 픽셀 밀도가 높다.밀도가 높은 효과는 바로 화면이 섬세하다는 것이다.같은 사선은 밀도가 높은 설비에 나타나면 톱니가 잘 생기지 않는다.밀도가 낮은 장치에 표시하면 톱날이 쉽게 나타난다.
우리는 아래의 두 폭의 그림을 보았다.
pix-001
 
 
pix-002
 
같은 그림 크기에 첫 번째 그림은 픽셀 밀도(50*50 픽셀), 두 번째 그림은 픽셀 밀도(5*5 픽셀)가 작아 전혀 다르게 보이지 않나요?
Android에서 가상 시스템을 만들 때 데스티티라는 매개 변수가 있습니다.이것은 dpi와 같은 개념일 것이다.
3. dip(device independent pixels): 장치 독립 픽셀.
추상적인 의미의 픽셀을 가리키며 프로그램은 그것을 이용하여 인터페이스 요소를 정의한다.이것은 실제 밀도와 무관한 단위로서 프로그래머가 레이아웃 방안(인터페이스 요소의 너비, 높이, 위치)을 구축하는 데 도움을 준다.
dip은android에서 추상적으로 나온 개념이다.그의 주요 목적은 무엇입니까?구글은 왜 dip으로 화면을 배치하는 것을 추천합니까?
동일한 dip 디스플레이 효과 실험
우리는 dip가 표시하는 단추로 효과를 보았다.
대비하기 편리하도록 버튼 아래에 사용자 정의 View를 설치합니다.
layout의 xml 파일:
 
   
   
   
   
  1. view plain 
  2. xml version="1.0" encoding="utf-8"?>  
  3. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent"  
  6. >  
  7. <com.study.about.dip.ViewForShow  
  8. android:layout_width="fill_parent"  
  9. android:layout_height="wrap_content"  
  10. android:text="@string/hello"  
  11. />  
  12. <Button  
  13. android:id="@+id/btn"  
  14. android:layout_width="240dip"  
  15. android:layout_height="320dip"  
  16. android:text="Button"  
  17. />  
  18. FrameLayout> 

사용자 정의 View 코드:
   
   
   
   
  1. view plain 
  2. package com.study.about.dip;  
  3.  
  4. import android.content.Context;  
  5. import android.graphics.Canvas;  
  6. import android.graphics.Color;  
  7. import android.graphics.Paint;  
  8. import android.util.AttributeSet;  
  9. import android.util.Log;  
  10. import android.util.TypedValue;  
  11. import android.view.View;  
  12.  
  13. public class ViewForShow extends View {  
  14. private Paint mPaint = new Paint();  
  15.  
  16. public ViewForShow(Context context) {  
  17. super(context);  
  18. }  
  19.  
  20. public ViewForShow(Context context, AttributeSet attrs) {  
  21. super(context, attrs);  
  22. }  
  23.  
  24. public ViewForShow(Context context, AttributeSet attrs, int defStyle) {  
  25. super(context, attrs, defStyle);  
  26. }  
  27.  
  28. public void draw(Canvas canvas) {  
  29. mPaint.setColor(Color.RED);  
  30. canvas.drawLine(0, 0, 120, 160, mPaint);  
  31. mPaint.setColor(Color.GREEN);  
  32. canvas.drawLine(0, 320, 120, 160, mPaint);  
  33. mPaint.setColor(Color.YELLOW);  
  34. canvas.drawLine(240, 0, 120, 160, mPaint);  
  35. mPaint.setColor(Color.BLUE);  
  36. canvas.drawLine(240, 320, 120, 160, mPaint);  
  37. }  

코드의 기능은 네 개의 직선을 그려 절대 픽셀로 표시하여 대비하는 것이다.그런 다음 240 * 320dpi 버튼을 선 위에 놓습니다.dpi와 픽셀의 관계를 봅시다.우리는 서로 다른 가상 기기를 시작해서 디스플레이 효과를 비교한다.
대비1: 화면의 길이와 너비의 비례가 같고 해상도가 다른 상황을 먼저 비교한다.
가상 머신 1:
pix-003
다음과 같이 표시됩니다.
pix-004
 
가상 시스템 2:
pix-005
다음과 같이 표시됩니다.
pix-006
우리는 두 모니터의 버튼이 같은 비율로 화면에 표시되는 것을 알 수 있다.네 개의 색깔의 직선은 절대 픽셀에 따라 그리고, 단추는dip에 따라 그린다.density=120일 때 240dip=180px;density=160일 때 240dip=240px.
기본적으로 우리는 하나의 결론을 얻어낼 수 있다.
같은 dip, 서로 다른 해상도 화면에서 화면의 상대적인 폭은 같다.상대적 너비란 컨트롤이 화면을 차지하는 비율로 이해할 수 있다.
density = 160에서 1dip = 1px
우리는 이런 공식을 얻을 수 있다.
desity :160 = px : dip
하지만 공식은 연산용으로만 쓰인다.진정한 의도는 dip 픽셀로 화면 컨트롤을 설정하면 화면 크기가 바뀌어도 컨트롤의 상대적인 크기는 변하지 않는다는 것이다.이것이 바로 구글이 생각하는'설비와 무관하다'는 의미다.

좋은 웹페이지 즐겨찾기