2010-02-21 7 views
3

투명 배경이있는 양식의 일부 이미지를 그리기 위해 DrawImage()를 사용하고 있습니다. 에 "후광"효과 부분적으로 투명 원인 그 이미지. (스크린 샷 봐)투명 배경이있는 이미지에서 "후광"을 제거하는 방법

방지하는 가장 좋은 방법은 무엇 그

이 같은 편집

alt text http://www.imagechicken.com/uploads/1266798081003158300.png

일어나는에서 아이콘은 내 바탕 화면에서 멋지게 보이므로 아이콘을 그리는 더 좋은 방법이 있어야합니다.

답변

1

아마도 두 번 렌더링으로 인해 발생합니다. 아이콘이 투명한 형태로 렌더링 된 다음 양식이 배경 위에 렌더링됩니다. 아이콘이 부분적으로 만 투명 해지는 곳이라면 양식이 투명성을 잃어 가고있는 것입니다.

아마도 바이너리가 아닌 부분 투명도를 지원하기 위해 양식을 변경할 수 있습니다.

1

원본 이미지가 완전 알파입니까 아니면 투명 색/1 비트 알파 마스크입니까? 일반적으로 1 비트 알파 이미지는 배경색을 취할 때가 많으며, 종종 흰색이되고 그저 희미 해집니다. 흰색이 아닌 배경에 1 비트 알파 이미지를 그릴 경우 이미지가 정확히 표시됩니다.


1 비트 투명도 키를 사용하면 부분적으로 투명한 값을 양식 배경색과 혼합하는 '후광'이 발생합니다. 따라서 '후광'이 양식 핑크입니다 : 전체 알파 이미지에 비트 투명도를 사용하지 않는

public class Form1 : Form 
{ 
    Image newImage; 

    public Form1() 
    { 
     this.BackColor = Color.Pink; 
     this.ClientSize = new Size(168, 168); 
     this.TransparencyKey = this.BackColor; 

     newImage = Image.FromFile(Path.Combine(
       Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), 
       "dot-mac-logo.png")); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.DrawImage(newImage, 20, 20); 
    } 
} 

그래서 - 나는 C#에서 그것을 할 방법을 아주 잘 모르겠지만, C에서 당신은 것 오프 스크린 DC와 창 표면 사이에 알파 혼합을 지정하려면 UpdateLayeredWindowMSDN 을 사용하십시오.

C# on this MSDN blogUpdateLayeredWindow을 사용하는 샘플이 있습니다.

+0

관심을 가져 주셔서 감사합니다. 대부분은 .ico 및 .png 파일입니다. 다음은 샘플입니다. http://icons.iconseeker.com/png/fullsize/cats-2/dot-mac-logo.png – CodeRush

+0

그 png를 사용하면'e.Graphics.DrawImage (newImage, destRect1, x, y, 너비, 높이, 단위);'1 : 1 크기 조정을 사용하는 MSDN의 샘플 코드에 따라. 그러나 Windows 아이콘은 전통적으로 1 비트 마스크를 가졌으므로 새로운 형식이 아닌 이상 (XP 이후) 문제가 발생합니다. –

+0

투명한 배경에 페인팅 하시겠습니까? – CodeRush

관련 문제