2012-01-17 5 views
1

나의 초기 본능은 Graphics 인스턴스를 통해 시스템의 현재 DpiY 설정을 얻는 것이지만이를 얻는 방법을 알 수는 없다.글꼴 크기를 픽셀 단위로 얻으려면 어떻게해야합니까?

IntPtr dC = UnsafeNativeMethods.GetDC(NativeMethods.NullHandleRef); 
try 
{ 
    using (Graphics graphics = Graphics.FromHdcInternal(dC)) 
    { 
     float num = graphics.DpiY; 
    } 
} 

내가 그래픽이없는 경우 그래픽을 구성 할 수있는 동일한 기능의 관리 방법은 무엇입니까 :

나는 MS가 안전하지 않은 코드를 사용하여 관리하는 것을 볼 반사경을 통해 Spellunking?

using (Graphics g = Graphics.FromHdc(IntPtr.Zero)) 
{ 
    return font.GetHeight(g.DpiY); 
} 

을하지만은 값이 예외 null 일 수 없습니다 던졌습니다 :

나는 시도했다.

+0

, 내가 얻을 때 : 필요가있을 경우

int textHeight = TextRenderer.MeasureText("Text", this.Font).Height; 

또는, 당신은 자신의 빠른 Graphic 당신을 만들 수 있습니다 내 질문의 끝으로 내 * 진짜 질문이 무엇인지 파악해 내 제목을 바꾼다. 내 편집을 검토하여 귀하의 질문에 진절머리가 나지 않았는지 확인하십시오. – Will

+0

@Will 그건 내 원래의 질문에 지점의 일종이었다. 나는 항상 글꼴 크기 (예 : 컨트롤 크기, 이미지 크기, 크기 조정)에 관심이있는 것은 아닙니다. 누군가가 질문을 단락시킬 수 있고,'MeasureText'를 사용하여 폰트 높이를 얻으려고하는 것이 두려웠습니다. 사람들은 질문을 적용 가능성과 혼동하는 경향이 있습니다. 나는 나의 질문을 가지고 합리성을 생략 해 보았습니다. 그러나 사람들은 * 왜 * 내가 뭔가하고 싶은지 모른 채 대답을 거부합니다. 왜 철저한 예제가 있었는지 * 왜 *, 그때 당신은 그가 심술 때문에 John Saunders downvote를 가졌습니다. (http://stackoverflow.com/q/8141795/12597) –

+0

@Will 여기에 또 다른 좋은 예가 있습니다. 한 남자가 정확한 질문을 물었습니다. *** LINQ 어디에서 또는 필터 C# *** (http://stackoverflow.com/questions/5954965/linq-where-or-filter-c-sharp). 그 대답은 질문에 대한 답을주었습니다. 오늘 나는 똑같은 질문을하지만, 기존의 대답은 그 질문에 대답하지 않습니다. 나는 완전히 똑같은 질문을 구성해야한다. (충분히 다른 표제로 재 배열 된 단어들과 함께 *** LINQ filter where or *** (http://stackoverflow.com/questions/8900131/linq-filter-where-or)). –

답변

1

당신은 Graphics 객체를 사용하지 않는 TextRendering 방법을 사용하여 시도 할 수 있습니다 : 보통

float textHeight; 
using (Bitmap b = new Bitmap(1,1)) 
using (Graphics g = Graphics.FromImage(b)) { 
    textHeight = this.Font.GetHeight(g.DpiY); 
} 
+0

나는 비트 맵의 ​​해상도가 현재 시스템 dpi 설정에서 생성되지 않을 것이라고 우려했다. (즉, 많은 드로잉 시스템이 72 dpi로 그래픽을 생성한다.) 그러나 비트 맵 생성시 시스템 해상도와 일치하는 것으로 보인다. . –

관련 문제