문제

픽셀을 C#포인트로 변환해야합니다. 주제에 대한 복잡한 설명을 보았지만 간단한 공식을 찾을 수는 없습니다. 표준 96dpi를 가정 해 봅시다.이 변환을 어떻게 교정합니까?

도움이 되었습니까?

해결책

거기 있습니다 인치당 72 포인트; 인치당 96 픽셀을 가정하기에 충분하다면 공식은 다소 간단합니다.

포인트 = 픽셀 * 72 / 96

Windows에서 디스플레이의 인치당 구성된 픽셀을 사용하여 GetDeviceCaps. Microsoft에는 가이드가 있습니다 "DPI 인식 응용 프로그램 개발", "DPI AWARE 글꼴 생성"섹션을 찾으십시오.

W3C는 픽셀 측정을 정의했습니다 px 정확히 1 인치의 1/96 디스플레이의 실제 해상도에 관계없이 위의 공식은 모든 웹 작업에 적합해야합니다.

다른 팁

코드가 양식에있는 경우 이것을 시도하십시오.

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();

96dpi가 a 거대한 실수. 가정이 옳더라도 글꼴을 확장 할 수있는 옵션도 있습니다. 따라서 10pts에 대한 글꼴 세트는 실제로 12.5pt (125%) 인 것처럼 보일 수 있습니다.

주어진부터 시작 :

  • 1 인치에 72 포인트가 있습니다 (포인트는 1/72 인치)
  • 150dpi로 설정된 시스템에는 인치당 150 픽셀이 있습니다.
  • 1 인치 = 72pt = 150px (150dpi 설정의 경우)

픽셀 (PX)을 기반으로 포인트 (PT)를 찾으려면 :

 72 pt    x pt
------ = -----                  (1) for 150dpi system
150 px    y px

재 배열 :

x = (y/150) * 72                (2) for 150dpi system

그래서:

points = (pixels / 150) * 72    (3) for 150dpi system

WPF는 System.Windows.FontSizeConverter와 함께 픽셀로 포인트를 변환합니다. FontSizeConverter는 System.Windows.lengthconverter를 사용합니다. 길이 콘버터는 요인 1.333333333333333을 사용하여 점 (p)에서 픽셀 (x)로 변환합니다. x = p * 1.333333333333333

System.Drawing.graphics에는 dpix 및 dpiy 속성이 있습니다. DPIX는 수평으로 인치당 픽셀입니다. DPIY는 수직으로 인치당 픽셀입니다. 그것들을 사용하여 포인트 (인치당 72 점)에서 픽셀로 변환합니다.

예 : 14 수평점 = (14 * dpix) / 72 픽셀

분명히이 모든 질문은 다음과 같습니다.

"모니터의 수평 및 수직 PPI (인치당 픽셀)를 어떻게 얻습니까?"

1 인치의 72 포인트가 있습니다 (정의에 따라 "점"은 1/72 인치로 정의됩니다. 마찬가지로 "Pica"는 1/72 발로 정의됩니다). 이 두 비트의 정보를 사용하면 PX에서 PT로, 매우 쉽게 뒤로 변환 할 수 있습니다.

사실 그것은 있어야합니다

points = pixels * 96 / 72

Points = (Pixels/96) * 72 표준 XP/Vista/7 기계 (공장 기본값)

Points = (Pixels / 72) * 72 표준 Mac을 실행하는 OSX (Factory Defaults)

Windows는 96dpi (Display) Mac에서 기본값으로 실행됩니다.

72 포스트 스크립트 포인트 = 1 인치 12 포스트 스크립트 포인트 = 1 PostScript PICA 6 PostScript PICAS = 72 포인트 = 1 인치

1 포인트 = 1⁄72 인치 = 25.4⁄72 mm = 0.3527 mm

dpi = 인치당 도트 ppi = 인치당 픽셀 lpi = 인치당 줄

EM을 측정하는 경우 더 많은 정보

16px = 1em (일반 텍스트의 기본값) 8em = 16px * 8 픽셀/16 = EM

이것은 작동합니다 :

int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);

높이 선이 점과 픽셀 (내 자신의 공식)으로 변환되었습니다. 다음은 행 높이 필드에서 수동 항목이 213.67 포인트의 예입니다.

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

여기서 213.67 포인트의 수동 항목은 284 픽셀을 제공합니다.
여기서 213.68 포인트의 수동 항목은 285 픽셀을 제공합니다.

(왜 0.45? 나는 모르지만 작동합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top