Thứ Tư, 5 tháng 6, 2013

PHÂN BIỆT ĐƠN VỊ ĐO TRONG ANDROID,IOS: PX, DP, DIP, SP AND DPI

1. Pixel – px hay còn gọi điểm ảnh:



Pixel, px hay có khi gọi là pel (xuất phát từ “picture element”), chúng ta hay gọi là điểm ảnh, có dạng hình vuông.

Một hình ảnh bitmap mà bạn thấy trên màn hình là ma trận hai chiều (2D) của các pixel tạo nên (hay ma trận của các hình vuông nhỏ). Mỗi pixel chiếm 1 vị trí trong ma trận và chứa 1 phần của hình ảnh hiển thị. Mỗi pixel chứa 1 màu duy nhất được phối hợp từ 3 màu cơ bản Red, Green, Blue.

Pixel thường được dùng để nói về độ phân giải resolution của thiết bị: ví dụ Samsung Galaxy S3 có màn hình độ phân giải 1280 x 720 (Height x Width). Điều này có nghĩa là chiều cao của màn hình Galaxy S3 là 1280 pixels, còn chiều rộng là 720 pixels.

Thiết bị có độ phân giải càng cao thì màn hình càng có nhiều pixels. Tuy nhiên điều này chưa nói lên được là màn hình sẽ hiển thị ảnh min, đẹp hay không. Điều này tuỳ thuộc vào diện tích của màn hình, vì vậy pixel không dùng làm đơn vị đo lường kích thước của màn hình thiết bị, nhưng lại được dùng để đo kích thước của ảnh.

2. dp, hay dip hay Density-independent Pixels, có khi được gọi là Device-independent Pixels:

Đây là một đơn vị đo chiều dài vật lý cũng giống như inch, cm, mm… mà Google thường  áp dụng để do kích thước màn hình của thiết bị. (Bên iOS dùng pt hay point có khái niệm tương tự với dp – xem mục 4 bên dưới)

160 dp = 1 inch - điều này có nghĩa 1dp = 1/160 = 0.00625 inch 



1 dp có thể chứa 1 hay nhiều pixel.



Như ví dụ hình trên 10 dp ở màn hình độ phân giải thấp 1dp tương đương 1 pixel. Ở độ phân giải trung bình thì 1dp tương đương 4 pixels …

Ví dụ: hàm dưới đây quy đổi dp ra px và ngược lại:











1

2

3

4

5

6

7

8

9

10

11

12

13

14


//Sample code

public static float convertDpToPixels(float dp,Context context){

    Resources resources = context.getResources();

    DisplayMetrics metrics = resources.getDisplayMetrics();

    float px = dp * (metrics.densityDpi/160f);

    return px;

}

public static float convertPixelsToDp(float px,Context context){

    Resources resources = context.getResources();

    DisplayMetrics metrics = resources.getDisplayMetrics();

    float dp = px / (metrics.densityDpi / 160f);

    return dp;


}




3. DPI – Dots per inch hay PPI – Pixels per inch:

Lưu ý dp hay dip không được nhầm lẫn với dpi (dots per inch). Dots per inch là số điểm ảnh (pixels) trên 1 inch của màn hình thiết bị, con số này càng lớn thì màn hình thiết bị hiển thị hình ảnh càng mịn và đẹp.  Dựa vào dpi người ta chia làm loại màn hình như sau: small: ldpi (120 dpi), normal: mdpi (160 dpi), large: hdpi (240 dpi), x-large: xhdpi (320 dpi) . Với mỗi loại này thì 1 dp tương ứng với số lượng pixels khác nhau, được tính theo công thức:

px = dp * (dpi / 160)

ví dụ với thiết bị có dpi là 320 thì với 10 dp ta có: 10 * (320/160) = 20 px , 1 dp tương đương 2 px.
iPhone3        320x480  163 ppi
iPhone4 640×960 326 ppi
iPhone4S 640×960 326 ppi
iPhone5 640×1136 326 ppi
iPad 1024x768 132 ppi
iPad2    1024x768  132 ppi
iPad (3gen)   2048x1536 264 ppi
iPad (4gen)   2048x1536 264 ppi
iPad mini 1024x768 163 ppi

4. PT – Point:

PT – viết tắt của Point, khái niệm pt tương tự như dp là một đơn vị đo kích thước thực, nhưng khác với dp:

1 pt = 1/72 inch, trong khi 1 dp = 1/160 inch

pt thường được dùng trong lập trình iOS.

5. SP - Scale-independent Pixels:

Cũng tương tự như dp, nhưng sp thường được dùng cho font size của văn bản.



Sau đây là ví dụ ở màn hình normal screen mdpi (160dpi) cho các đơn vị đo dp, sp, px, pt, inch

0 nhận xét:

Đăng nhận xét