2010-03-15 2 views
2

그래픽 객체에 32 비트 투명도로 텍스트를 그려야합니다. 내가 시도 할 때, 나는 결과에서 검은 색으로 만 나타납니다.그래픽 객체에 반투명 텍스트를 그리는 방법은 무엇입니까?

같은 반투명 색상으로 선을 그리려면 완벽하게 작동합니다.

는이 코드가 있습니다

lBitmap As New Bitmap(32, 32, PixelFormat.Format32bppArgb) 
lGraphic As Graphics = Graphics.FromImage(lBitmap) 

lGraphic.SmoothingMode = SmoothingMode.HighQuality 
lGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic 

lGraphic.Clear(Color.Transparent) 

Dim lTestTransparencyColor As Color = Color.FromArgb(100, 140, 0, 230) 
lGraphic.DrawLine(New Pen(lTestTransparencyColor), 0, 0, 32, 32) 

lBrush As New SolidBrush(lTestTransparencyColor) 
lGraphic.DrawString("A", New Font("Arial", 12), lBrush, 0, 0) 

Dim lImage As Image = lBitmap 
lImage.Save("D:\Test.png", Imaging.ImageFormat.Png) 

라인이 제대로 적용되는 투명하게 그려을하지만, 텍스트 투명도와 검은 색입니다.

편집 :
그래픽에 배경 오브젝트로 내가 단색을 설정하는 경우는, 다음 텍스트 투명성이 작동하지만, 나는 그것이 단색 배경 단지 투명하지, PNG 파일 결과에 진정으로 투명해야 이미지의 색상.

lGraphic.Clear(Color.FromArgb(100, 0, 255, 0)) 

나는 그것이 SolidBrush는 투명도를 지원하지 않는다 될 수있다 생각했다,하지만 난 미리 정의 된 브러시가 투명라는 이름의 발견 (Brushes.Transparent)했다 :이 같은 배경으로 부분적으로 투명한 색을 설정하면 이 문제가 발생합니다 SolidBrush 내가 디버그에서 보았을 때. 나는 텍스트를 그릴 때 Brushes.Transparent을 브러시로 사용하려고 시도했지만, 전혀 표시하지 못했습니다. 즉, 내가 일할 수있는 완전한 투명성을 얻지 만, 부분적인 투명성은 얻지 못한다는 것을 의미합니다.

내가 성공을 여러 번 항상이 튜토리얼을 따라 한

답변

3

설정 SingBitPerPixel 또는 SingleBitPerPixelGridFit 중 하나에 TextRenderingHint :

그래픽의 배경이 투명 개체 때 그것은 단지 문제가
lGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixel 
+0

이 설정에 대해 알려 주신 데 대해 감사드립니다. 대신 TextRenderingHint.AntiAlias를 사용했습니다. 그렇다면 반투명 안티 앨리어싱으로 완벽한 결과를 얻었습니다! – awe

0

: http://www.codeproject.com/KB/GDI-plus/watermark.aspx

난 당신이 "32 비트, 투명성"정말 무슨 뜻인지 확실하지 않다, 그것은 당신을 도와 희망하지만 위의 링크를 믿는다 브러시를 만들 때 알파 필터로 투명도 레벨을 조정하는 방법을 알려줍니다.

SolidBrush semiTransBrush2 = 새 SolidBrush (Color.FromArgb (153, 0, 0,0));

+0

. 배경색이 투명하지 않은 경우 텍스트 투명도가 적용됩니다. 나는 이것을 명확히하기 위해 내 게시물을 업데이트 할 것이다. – awe