2012-01-23 3 views
0

가능한 한 CSS 글꼴을 반영해야하는 코드의 텍스트 이미지를 만듭니다. CSS 클래스는 다음과 같습니다System.Drawing.Font는 CSS 글꼴을 반영합니다.

.font 
{ 
     letter-spacing: -0.7px; 
     font-family: segoe wp,segoe ui,verdana,arial,helvetica,sans-serif; 
     font-size: 1.15em; 
     padding: 10px; 
} 

내 이미지 코드는 다음과 같습니다

using (var helper = new Bitmap(1, 1)) 
using (var gHelper = Graphics.FromImage(helper)) 
using (var font = new Font("Segoe WP", 1.15f, GraphicsUnit.Point)) 
using (var brush = new SolidBrush(Color.White)) 
{ 
    var size = gHelper.MeasureString(concept, font); 

    using (var image = new Bitmap((int)size.Width + _padding, (int)size.Height + _padding)) 
    { 
     using (var g = Graphics.FromImage(image)) 
     { 
      g.Clear(Color.Black); 
      g.DrawString(concept, font, brush, (float)_padding/2, (float)_padding/2); 
     } 

     var converter = new ImageConverter(); 
     var b = (byte[])converter.ConvertTo(image, typeof(byte[])); 

     return File(b, _contentType); 
    } 
} 

이 코드에 의해 생성되는 이미지는 아주 작다.

내가 예상하는 문자 간격은 루프를 만들고 각 문자를 개별적으로 그려야하지만 C# 내부의 EM을 사용하려면 어떻게해야합니까?

답변

3

제 생각에는 EM으로 해결할 수 없습니다. 고정되어 있지 않기 때문입니다.
은 (http://webdesign.about.com/od/typemeasurements/qt/how-big-is-an-em.htm에서 추출)이 부분 읽기 :

을하지만 빅은 엠은 어떻게?
W3C에 따르면 : " 이 사용 된 요소의 'font-size'속성의 계산 된 값과 같습니다. 예외는 값에서 '엠'이 발생할 때입니다. 'font-size'속성 자체. 부모 요소의 글꼴 크기 을 참조합니다. " 즉, em은 절대 크기가 입니다. 그들은 자신의 위치에 따라 크기 값을 사용합니다. 대개 웹 디자이너의 경우 웹 브라우저에 있음을 의미하므로 1em 높이 글꼴 인 은 해당 브라우저의 기본 글꼴 크기 인 과 정확히 동일한 크기입니다.

그러나 기본 크기는 얼마나됩니까?
대부분의 사람들이 당신이 대부분의 브라우저 16px의 기본 글꼴 크기가 있다고 가정 할 수 없기 때문에 고객이 브라우저에서 기본 글꼴 크기를 변경할 수 있지만, 수 로, 100 % 확신 할 수있는 방법이 없습니다. 그래서 대부분 1em = 16px입니다.

그래서 당신은 시도 할 수 있습니다 :

using (var font = new Font("Segoe WP", 16 * 1.15f, GraphicsUnit.Point)) 

이 매우 이것은 단지 근사치 것을 처음부터 알고!

0

그래픽 객체는 사용자가 낮은 해상도로 화면에 그리는 것으로 가정합니다. 새로운 그래픽 객체를 생성하고 더 적절한 해상도

Bitmap bmp = new Bitmap(2000, 500); 
bmp.SetResolution(300, 300); 
Graphics g = Graphics.FromImage(bmp); 
// render your text. 

또한 좋은 결과를 얻을 수 System.Drawing.TextRenderer을 사용할 수를 정의합니다.

1

using (var font = new Font("Segoe WP", 1.15f, GraphicsUnit.Point))

포인트! = 엠.

IIRC, em은 기본 글꼴의 비율입니다.

관련 문제