2012-07-04 1 views
0

배경 : WinForms 및 .NET4.0을 사용하는 레거시 맵 응용 프로그램에서 작업 중입니다. 레이블, 도로, 아이콘은 지형과 별도로 "오버레이"라는 별도의 비트 맵에 그려집니다. 오버레이의 배경은 투명하며 나중에 지형 비트 맵 위에 그려집니다.Graphics.DrawString() (.NET 4.0)을 사용하여 페인팅하는 동안 배경에 영향을받는 문자 스타일

문제는 텍스트를 비트 맵에 그림을 그릴 때 텍스트 스타일이 비트 맵 배경의 영향을 받는다는 것입니다.

enter image description here

레이블 "수도원"과 "흰색"을 살펴보십시오 :
난 당신에게 오버레이의 예 그림을 보여줍니다. "흰색"은 완전히 투명한 배경에 칠해졌으며 이제는 굵게 써진 것처럼 보입니다. "대 수도원"의 "ab"는 일반 텍스트가 아이콘 위에 칠해진 것처럼 보입니다.

var bmp = new Bitmap(mapControl.Width, mapControl.Height); 
using (var graphics = Graphics.FromImage(bmp)) 
{ 
    var labelRectangle = GetLabelBorders(); 
    Color labelBackgroundColor = Color.FromArgb(128, Color.FromName("LightPink")); 
    SolidBrush sb = new SolidBrush(labelBackgroundColor); 
    graphics.FillRectangle(sb, labelRectangle); 
    graphics.DrawRectangle(WhitePen, labelRectangle .X, labelRectangle .Y, 
       labelRectangle .Width - 1, labelRectangle .Height - 1); 
    Font timesnew8 = new Font("TimesNew", 8); 
    StringFormat strForm = new StringFormat(); 
    strForm.Alignment = StringAlignment.Near; 
    graphics.DrawString("abbey", timesnew8, Brushes.Black, labelRectangle , strForm); 
} 

내가 찾고 텍스트 - 굵은하지 원하는 : 여기

레이블을 생성하는 코드입니다. 어떻게해야합니까?

+1

텍스트를 반올림하기 위해 smoothingmode를 사용해 보셨습니까? 그 또는 TextRenderingHint? http://msdn.microsoft.com/en-us/library/9t6sa8s9.aspx 또는 http://msdn.microsoft.com/en-us/library/system.drawing.graphics.textrenderinghint.aspx – Tom

+0

그림은 어디에 있습니까? 에서? 더블 버퍼링이 활성화되어 있습니까? – leppie

+0

@leppie : 현실을 더 반영하도록 코드를 업데이트했습니다. 더블 버퍼링이 없으며 로컬 Bitmap 객체에 페인팅을하고 있습니다. – user256890

답변

2

앞서 언급했듯이 : Graphics 객체에 TextRenderingHint 속성을 사용하여 텍스트가 다르게 렌더링되는지 확인하십시오.

관련 문제