2015-01-15 5 views
0

비트 맵이 있고 다각형으로 정의 된 특정 영역에 투명도를 적용하고 싶습니다. 그건 문제가 아니야. 현재 직면하고있는 문제는 폴리곤의 INVERTED 영역에 투명도를 적용하는 방법입니다. 나는 Bitmap.SetPixel()을 사용하여 시도했지만 매우 느리다. 다음은 정상적인 다각형에서 작동하는 현재의 메서드입니다.C# 다각형에 의해 정의 된 영역에 투명도를 설정하십시오.

public Bitmap Mask(Bitmap b, Point[] mask, bool invert) 
    { 
     Bitmap ret = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
     Graphics g = Graphics.FromImage(ret); 
     g.Clear(Color.FromArgb(255,255,255,255)); 
     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

     g.DrawImage(b, 0, 0, width, height); 
     g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; 
     g.FillPolygon(new SolidBrush(Color.Transparent), mask); 

     return ret; 
    } 
+0

다각형의 반전 된 영역 선택에 투명도를 적용하는 방법에 대한 문제를 해결하려고 시도 했습니까? 가지고 있다면, 당신이 무엇을 시도했는지, 왜 당신이 붙어 있는지 말해주십시오. 누군가에게 당신을 위해 무엇인가를 완전히 파악해 줄 것을 요구하는 것은 당신의 노력을 거의 나타내지 않고 응답을 얻지 못할 것입니다. – Zack

답변

2

해결책을 찾았습니다.

나는 Bitmap b as a texture과 함께 TextureBrush을 사용했으며 끝에 투명 폴리곤 효과를 생성하는 투명 배경에 다각형을 그렸습니다.

Bitmap ret = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
Graphics g = Graphics.FromImage(ret); 
g.Clear(Color.FromArgb(0,255,255,255)); 
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

if (!invert) 
{ 
    g.DrawImage(b, 0, 0, width, height); 
    g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; 
    g.FillPolygon(new SolidBrush(Color.Transparent), mask); 
} 
else g.FillPolygon(new TextureBrush(b), mask); 
return ret; 
+1

당신이 한 일을 설명해 주시겠습니까? 당신의 질문과 대답은 커뮤니티에 귀중한 충분한 설명이 부족합니다 (보통 질문이 결국 닫히는 것을 의미합니다). – djv

+0

@Verdolino 텍스쳐로 비트 맵 b와 함께 TextureBrush를 사용했고, 결국 역 다각형 효과를 생성하는 비 배경에 폴리곤을 그렸습니다. 나는 그 외에 아무것도 추가/변경하지 않았습니다. – kubert

+0

알았어요. 나는 당신의 대답에 그것을 추가했습니다. 앞으로는 자신의 대답을 편집하고 직접 설명을 추가 할 수 있습니다. +1하고 환영합니다! – djv