VnReview
Hà Nội

Windows và cuộc chạy đua DPI (Phần 1)

Trong vài năm gần đây, mật độ điểm ảnh trên các thiết bị di động đã trở thành "chiến trường" khốc liệt của các nhà sản suất. Cuộc đua được khơi mào từ chiếc iPhone 4 "Retina", nhanh chóng lan rộng từ điện thoại di động sang máy tính bảng. Trong khi đó, PC hay Mac lại trở nên "khiêm tốn" với những màn hình khó có thể coi là ấn tượng.

1. Giới thiệu

Màn hình LCD tiêu chuẩn của vài năm trước chỉ có mật độ trong ngưỡng 96 ppi hoặc thấp hơn. Máy tính xách tay có độ phân giải lớn hơn nhưng cũng chỉ đặt ngưỡng 120 ppi. Mật độ thấp đã làm máy tính trở nên yếu thế hơn các thiết bị di động.

Phức tạp hơn nữa, màn hình máy tính và thiết bị di động phục vụ cho những mục đích khác nhau. Trên thiết bị di động, độ phân giải cao giúp tăng chất lượng hình ảnh. Trong khi đó, độ phân giải cao trên máy tính luôn đi kèm với sự tăng kích thước màn hình và được sử dụng để làm nhiều việc hơn. Thiết bị di động còn có một lợi thế lớn: nó được hỗ trợ bởi một hệ điều hành mới với thiết kế cho độ phân giải cao và không phải giải quyết vấn đề tương thích trên các ứng dụng cũ. Điện thoại hay máy tính bảng có thể dễ dàng đạt độ phân giải cao, tuy nhiên trên PC hay Mac mọi chuyện không còn đơn giản như vậy.

Một số laptop được trang bị màn hình độ phân giải cao

Năm 2012, Apple tung ra mẫu MacBook Pro màn hình Retina 15,4 inch. Ngay lập tức, nó trở thành mẫu máy tính xách tay có mật độ điểm ảnh cao nhất. Apple đã mất nhiều công sức để chắc chắn rằng màn hình độ phân giải cao sẽ trở nên hữu dụng. Và lần đầu tiên, việc tăng độ phân giải trên máy tính giúp tăng chất lượng hình ảnh. Tuy nhiên, OS X chưa thực sự hoàn hảo. Một số ứng dụng hoạt động không ổn định, ví dụ như văn bản bị mờ hoặc một số vấn đề giao diện người dùng khác. Ngược lại, những ứng dụng mà Apple dành riêng cho màn hình Retina, nó đã đem lại những trải nghiệm tuyệt vời. Nếu các nhà phát triển nâng cấp ứng dụng của họ, người sử dụng sẽ lại được thưởng thức sự ưu việt của màn hình độ phân giải cao như trên các thiết bị di động.

Còn với Windows? Windows Vista hay Windows 7 đều đã hỗ trợ thiết lập High DPI(số điểm trên inch vuông). Thậm chí, ngay từ Windows XP đã hỗ trợ tỷ lệ DPI. Vấn đề lớn nhất [của Windows] là không có nhân tố thị trường nào thúc đẩy việc sử dụng High DPI (trong hệ điều hành và các hàm API, nó tham chiếu DPI ngược lại với PPI) như trên MacBook Pro Retina. Các OEM hài lòng khi bán cho người tiêu dùng với mức giá thấp - như tấm nền 1366x768 trong nhiều năm. Nếu người tiêu dùng không đòi hỏi cao hơn, hầu hết các OEM sẽ không cung cấp những màn hình có độ phân giải cao cho phân khúc thị trường giá rẻ.

2. Phương pháp cũ – Cân chỉnh tỷ lệ trên Windows XP

Như đã đề cập, ngay từ phiên bản Windows XP đã hỗ trợ màn hình độ phân giải cao nhưng thực tế nó không hữu dụng. Thay đổi thiết lập DPI trên XP giúp tăng cỡ chữ, các thành phần hệ điều hành và giúp mọi thứ trông lớn hơn. Nhưng nếu thiết lập DPI quá cao, nhiều ứng dụng sẽ bị lỗi. Thậm chí trên XP đã tồn tại các hàm API giúp các lập trình viên kiểm tra tỷ lệ phông chữ. Tuy nhiên, ứng dụng sẽ không kiểm tra mức DPI phông chữ. Và hậu quả là: khung chữ chồng lên phần giao diện người dùng, phần văn bản tràn ra ngoài khung gây cảm giác khó chịu cho người sử dụng.

3. Phương pháp mới - Ảo hóa DPI (DPI Virtualization)

Đề giải quyết vấn đề trên, phiên bản Windows Vista giới thiệu một khái niệm mới - ảo hóa DPI. Dưới 120 DPI hệ thống sẽ tiếp tục sử dụng các thuật toán tỷ lệ trên XP nhưng khi DPI lớn hơn 120, tính năng ảo hóa DPI sẽ được kích hoạt. Bất kì ứng dụng nào không nhận dạng được DPI (DPI-unaware) sẽ được khai báo DPI ở mức cơ sở (96 DPI). Sau đó Windows tự động mở rộng ứng dụng đó theo mức DPI được chọn bởi người dùng và hiển thị ra màn hình.

Khi đã khắc phục được tình trạng phông chữ tràn ra ngoài khung văn bản thì vấn đề ứng dụng bị mờ lại nảy sinh. Do vậy, Microsoft đã giới thiệu một hàm API mà các lập trình viên có thể gọi là SetProcessDpiAwareness. Hàm này sẽ thông báo ứng dụng đã nhận dạng được DPI (DPI-aware ) và Windows không cần can thiệp. Việc xử lý thiết lập DPI trong ứng dụng này sẽ do các nhà lập trình quyết định.

4. Vấn đề ngoài mong đợi

Tuy vậy, nhiều ứng dụng trong Windows (bao gồm cả những phần mềm được viết bởi Microsoft) vẫn không tuân theo cách trên. Hãy xem xét một ví dụ với trình chơi video VLC.

VLC 1.0 là một ứng dụng DPI-unaware. Ứng dụng này được viết ở mức 96 DPI. Điều này khiến ứng dụng bị co nhỏ trên màn hình High DPI . Nhưng nhờ công nghệ ảo hóa DPI, Windows có thể tự mở rộng tỷ lệ ứng dụng theo thiết lập DPI. Điều này làm ứng dụng bị mờ đi nhưng các điều khiển trình đơn và phông chữ đều cho kích thước chính xác như nhìn thấy ở đây:

Nhìn vào bức hình, rõ ràng nó được mở rộng và hoàn toàn có thể sử dụng. Nhưng VLC là một ứng dụng phát video. Với ảo hóa DPI, việc phát video trên ứng dụng này cũng được xử lý ở mức 96 DPI và sau đó mở rộng ra màn hình. Điều này khiến video bị mờ đi và đây không phải điều VLC muốn. Để khắc phục vấn đề này, các nhà phát triển đã thay đổi ứng dụng để nó khai báo với hệ thống rằng có thể nhận biết được DPI (System DPI-Aware). Windows sẽ vô hiệu hóa việc tự động tinh chỉnh tỷ lệ ở ứng dụng này và giao cho ứng dụng tự làm điều đó. Tuy nhiên, trong trường hợp này, VLC không thực hiện bất cứ việc mở rộng tỷ lệ nào như các bạn thấy trong bức hình VLC 1.1.1 và phiên bản mới nhất 2.1.3:

VLC 1.1.1 (bên trái) và VLC 2.1.3 (bên phải)

Ở đây, bất kỳ yếu tố nào trong phần giao diện người dùng đều được Windows xử lý theo đúng thiết lập DPI, nhưng phần còn lại của ứng dụng không được xử lý gây xáo trộn tỷ lệ. Và VLC đã chọn cách khôn ngoan – phóng to phần phông chữ trong phần giao diện người dùng. Điều này giúp ứng dụng vẫn có thể sử dụng tại High DPI mà không phải mở rộng ứng dụng theo tỷ lệ.

Hãy xem xét một ứng dụng khác – Google Chrome với những vấn đề nó gặp phải khi chạy trên hệ thống High DPI. Điều lạ lùng nhất là Chrome gặp vấn đề khi mở rộng theo tỷ lệ mặc dù nó có hỗ trợ High DPI. Các phiên bản Chrome trên Chrome OS, MAC OS X hay trên các phiến bản Android đều hoạt động tốt, nhưng trên Windows thì không.; Dưới đây là ảnh chụp Google Chrome trên chiếc Lenovo Yoga 2 Pro tại độ phân giải 3200x1800 với thiết lập mở rộng 200% (thiết lập mặc định từ nhà sản xuất):

(Bấm vào để xem kích cỡ lớn hơn)

Để nhận ra vấn đề, bạn cần mở bức ảnh tại độ phân giải gốc. Thoạt nhìn mọi thứ đều tốt nhưng khi nhìn vào phần văn bản trên trang web.

Với hình cắt, bạn có thể nhận thấy phông chữ của Chrome trên hệ thống High DPI rất tồi tệ. May mắn thay, Chrome không giống nhiều ứng dụng khác, có một số cách để giải quyết vấn đề này. Trước tiên, bạn phải mở "chrome://flags setting page" và sau đó kích hoạt "HiDPI Support Windows". Tiếp theo, bạn nhấn chuột phải vào biểu tượng Chrome trên máy tính, chọn "properties", và sau đó vào tab "Compatibility". Ở đây, bạn cần tích vào ô: " Disable display scaling on High DPI settings" và ấn "Apply".

Khi tích vào ô theo hướng dẫn ở trên, bạn đã vô hiệu hóa tính năng ảo hóa DPI. Chrome sẽ sử dụng tỷ lệ như trên XP. Lý do cho vấn đề trên có thể là vì Chrome vẫn được hỗ trợ trên hệ điều hành cũ - Windows XP.

Tiếp theo, chúng ta hãy so sánh Chrome với một ứng dụng khác Internet Explorer 11. IE 11 truy vấn hệ điều hành cho các thiết lập DPI. Khi nhận được phản hồi, nó chia lại các thành phần giao diện người dùng theo tỷ lệ, sau đó dùng tính năng Zoom để phóng to trang web.

IE11 cũng sử dụng các mức DPI được truy vấn từ hệ điều hành để thiết lập mức phóng to mặc định. Đây là một ảnh chụp màn hình IE 11 với độ phân giải 3200x1800 và DPI thiết lập ở mức 96.

(Bấm vào để xem kích cỡ lớn hơn)

Thoạt nhìn, nó có vẻ xấu nhưng thực tế nó đã hoạt động tốt. IE truy vấn hệ điều hành với mức DPI (hiện tại là 96) và mở rộng chính xác theo tỉ lệ đó.

Trong phần thứ hai của bài viết, chúng ta sẽ tiếp tục xem "cuộc chiến" chưa có hồi kết giữa Windows và DPI.

Hoàng Anh

Theo AnandTech

Chủ đề khác