픽셀을 포인트로 변환


126

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

답변:


199

인치당 72 포인트 가 있습니다 . 인치당 96 픽셀을 가정하는 것으로 충분하다면 공식은 다소 간단합니다.

포인트 = 픽셀 * 72/96

을 사용하여 Windows에서 디스플레이의 인치당 구성된 픽셀을 가져 오는 방법이 있습니다 GetDeviceCaps. Microsoft에는 "DPI 인식 응용 프로그램 개발" 이라는 가이드가 있습니다. " DPI 인식 글꼴 만들기"섹션을 찾아보십시오.

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


26
72 Points Per inch는 논쟁의 여지가없는 항목이 아니며 전반적으로 동일합니다!
Mitchel Sellers

11
@David dpi는 디스플레이에 따라 다르며 ppi는 인쇄 상수입니다
Corey Ross

3
@David는 모니터에 가변 DPI가있는 이유를 설명합니다. PPI는 여전히 동일합니다. 1 마일의 킬로미터 수는 운전하는 차에 따라 변하지 않습니다. 96dpi는 일반적으로 좋은 생각이 아니지만 그렇게하면 주어진 공식이 정확합니다.
Quentin

13
일반적으로 PPI는 인치당 포인트가 아니라 인치당 픽셀의 약어입니다. 아마도 그것이 혼란의 원인일까요? 인치당 포인트는 항상 72입니다. 링크 Xetius에 감사드립니다.
Mark Ransom

@Corey Ross : 사실 DPI는 프린터에 의존하고 PPI는 모니터에 달려 있습니다. 그러나 모든 사람들이 잘못 PPI DPI는 ... 전화
스테판 스타 이거에게

58

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

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

2
DpiX는 높이에 DpiY를 사용해야하는 폭에 대한 것이라는 점을 지적 할 가치가 있습니까?
PandaWood

25

96dpi가 실수 라고 가정합니다 . 가정이 맞더라도 글꼴 크기를 조정할 수있는 옵션도 있습니다. 따라서 10pt로 설정된 글꼴은 실제로 12.5pt (125 %) 인 것처럼 표시 될 수 있습니다.


23

주어진 것으로 시작 :

  • 1 인치에는 72 포인트가 있습니다 (즉, 1 인치의 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

1
첫 번째 방정식의 dpi는 px이어야합니다. 150dpi 시스템에 대한 가정 (1)이 있으므로 항을 취소하는 경우
Jason S

9

WPF는 System.Windows.FontSizeConverter를 사용하여 포인트를 픽셀로 변환합니다. FontSizeConverter는 System.Windows.LengthConverter를 사용합니다. LengthConverter는 계수 1.333333333333333333을 사용하여 포인트 (p)에서 픽셀 (x)로 변환합니다. x = p * 1.3333333333333333


이 값이 사용되는 이유 도 설명해주세요 ... 공교롭게도 96dpi (디스플레이 창의 기본 DPI) / 72dpi (포인트가 정의 된 DPI)입니다.
Has QUIT--Anony-Mousse 2011

5

System.Drawing.Graphics에는 DpiX 및 DpiY 속성이 있습니다. DpiX는 수평 인치당 픽셀입니다. DpiY는 수직 인치당 픽셀입니다. 포인트 (72 포인트 / 인치)에서 픽셀로 변환하는 데 사용합니다.

예 : 14 개의 수평 포인트 = (14 * DpiX) / 72 픽셀


4

확실히이 모든 질문은 다음과 같아야합니다.

"모니터의 수평 및 수직 PPI (Pixels Per Inch)는 어떻게 얻습니까?"

인치에는 72 개의 포인트가 있습니다 (정의에 따라 "포인트"는 인치의 1 / 72nd로 정의되고 "pica"는 피트의 1 / 72nd로 정의 됨). 이 두 가지 정보를 사용하면 px에서 pt로 쉽게 변환 할 수 있습니다.


더 복잡하게 만들기 위해 저는 PDF로 변환되는보고 서비스 (RDL) 보고서에서 항목을 정렬하고 있습니다. 하루가 끝나면 도대체 누가 DPI가 무엇인지 압니까? 최선의 추측을 사용하고 있습니다. :)
Todd Davis

"모니터의 수평 및 수직 DPI를 어떻게 구합니까?"를 의미합니다. PPI는 72의 상수입니다. 항상 그래 왔고 앞으로도 계속 될 것입니다.
Xetius

1
인치당 픽셀 (Pica)이 아니라 인치당 픽셀입니다.
JeeBee

1
음, 이런, Pica가 아닙니다! 1/6 인치입니다. 인치당 포인트는 중복되며 용어는 "포인트"입니다. "점"은 1/72 인치입니다.
JeeBee

4

실제로 그것은

points = pixels * 96 / 72

1
96dpi 및 72ppi (인치당 포인트)를 가정하는 경우 이는 올바르지 않습니다. 포인트 = 픽셀 *
Jason S

4

포인트 = (픽셀 / 96) * 표준 XP / Vista / 7 시스템에서 72 (공장 기본값)

포인트 = (픽셀 / 72) * OSX를 실행하는 표준 Mac에서 72 (공장 기본값)

Windows는 기본적으로 96dpi (디스플레이)에서 실행됩니다. Mac은 기본적으로 72dpi (디스플레이)에서 실행됩니다.

72 POSTSCRIPT 포인트 = 1 인치 12 POSTSCRIPT 포인트 = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 포인트 = 1 인치

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

DPI = 인치당 도트 수 PPI = 인치당 픽셀 수 LPI = 인치당 라인 수

em을 측정으로 사용하는 경우 추가 정보

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


1

이것은 작동합니다 :

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

0

Mac에서 wxPython을 사용하여 다음과 같이 올바른 DPI를 가져옵니다.

    from wx import ScreenDC
    from wx import Size

    size: Size = ScreenDC().GetPPI()
    print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')

결과 :

x-DPI : 72 y-DPI : 72

따라서 공식은 다음과 같습니다.

포인트 : int = (pixelNumber * 72) // 72


-1

포인트와 픽셀로 변환 된 높이 선 (나만의 공식). 다음은 행 높이 필드에 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입니까? 모르겠지만 작동합니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.