Tôi có nhu cầu chuyển đổi Pixels thành Điểm trong C #. Tôi đã thấy một số giải thích phức tạp về chủ đề này, nhưng dường như không thể tìm thấy một công thức đơn giản. Giả sử 96dpi tiêu chuẩn, làm cách nào để tính toán chuyển đổi này?
Tôi có nhu cầu chuyển đổi Pixels thành Điểm trong C #. Tôi đã thấy một số giải thích phức tạp về chủ đề này, nhưng dường như không thể tìm thấy một công thức đơn giản. Giả sử 96dpi tiêu chuẩn, làm cách nào để tính toán chuyển đổi này?
Câu trả lời:
Có 72 điểm mỗi inch ; nếu đủ để giả định 96 pixel mỗi inch, thì công thức khá đơn giản:
điểm = pixel * 72/96
Có một cách để lấy các pixel được định cấu hình trên mỗi inch của màn hình của bạn trong Windows bằng cách sử dụng GetDeviceCaps
. Microsoft có một hướng dẫn gọi là "Phát triển ứng dụng Aware DPI" , hãy tìm phần "Tạo phông chữ DPI-Aware".
W3C đã xác định phép đo pixel px
là chính xác 1/96 của 1in bất kể độ phân giải thực của màn hình của bạn là bao nhiêu, vì vậy công thức trên phải phù hợp với mọi công việc trên web.
Giả sử 96dpi là một sai lầm rất lớn . Ngay cả khi giả định là đúng, cũng có một tùy chọn để chia tỷ lệ phông chữ. Vì vậy, một phông chữ được đặt trong 10pts thực sự có thể được hiển thị như thể nó là 12,5pt (125%).
Bắt đầu với cái đã cho:
Nếu bạn muốn tìm điểm (pt) dựa trên pixel (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Sắp xếp lại:
x = (y/150) * 72 (2) for 150dpi system
vì thế:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF chuyển đổi các điểm thành pixel bằng System.Windows.FontSizeConverter. FontSizeConverter sử dụng System.Windows.LdropsConverter. LengthConverter sử dụng hệ số 1.333333333333333333 để chuyển đổi từ điểm (p) sang pixel (x): x = p * 1.3333333333333333
Chắc chắn toàn bộ câu hỏi này nên là:
"Làm cách nào để có được PPI ngang và dọc (Pixels Per Inch) của màn hình?"
Có 72 điểm trong một inch (theo định nghĩa, "điểm" được định nghĩa là 1/72 inch, tương tự "pica" được định nghĩa là 1/72 của một feet). Với hai bit thông tin này, bạn có thể chuyển đổi từ px sang pt và quay lại rất dễ dàng.
điểm = (pixel / 96) * 72 trên máy XP / Vista / 7 tiêu chuẩn (mặc định của nhà máy)
điểm = (pixel / 72) * 72 trên máy Mac tiêu chuẩn chạy OSX (Mặc định của nhà máy)
Windows chạy như mặc định ở 96dpi (hiển thị) Máy Mac chạy như mặc định ở 72 dpi (hiển thị)
72 POSTSCRIPT Điểm = 1 inch 12 POSTSCRIPT Điểm = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 Điểm = 1 inch
1 điểm = 1⁄72 inch = 25,4⁄72 mm = 0,3527 mm
DPI = Dots Per Inch PPI = Pixels Per Inch LPI = Lines per inch
Thông tin thêm nếu sử dụng em làm thước đo
16px = 1em (mặc định cho văn bản thông thường) 8em = 16px * 8 Pixels / 16 = em
Những công việc này:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Sử dụng wxPython trên Mac để có được DPI chính xác như sau:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
Sản lượng này:
x-DPI: 72 y-DPI: 72
Do đó, công thức là:
điểm: int = (pixelNumber * 72) // 72
Các dòng chiều cao được chuyển đổi thành điểm và pixel (công thức của riêng tôi). Dưới đây là một ví dụ với mục nhập thủ công 213,67 điểm trong trường Chiều cao hàng:
213.67 Manual Entry
0.45 Add 0.45
214.12 Subtotal
213.75 Round to a multiple of 0.75
213.00 Subtract 0.75 provides manual entry converted by Excel
284.00 Divide by 0.75 gives the number of pixels of height
Ở đây, mục nhập thủ công 213,67 điểm cho ra 284 pixel.
Ở đây, mục nhập thủ công 213,68 điểm cho 285 pixel.
(Tại sao 0,45? Tôi không biết nhưng nó hoạt động.)