2013-06-24 1 views
0

VS 2008의 양식 응용 프로그램에서 작업 중이며 두 이미지가 겹쳐져 있습니다. 이러한 이미지는 그들이 함께 혼합 할 수 있어야하므로 투명하지만 결과는 아래에 보여입니다 :이 유사한 게시물을 볼 수 있지만,이 두 이미지를 함께 혼합 수없는 이유를 알아낼 수 없을 것 같습니다 한 enter image description here투명도 문제 C#

. 아래는 내가 그것에 대해려고하는 방법에 대한 코드는 다음과 같습니다

  InitializeComponent(); 
     this.Width = 700; 
     this.Height = 768; 

     Bitmap BackgroundImg = new Bitmap(@"C:\Users\Classic.bmp"); 
     Bitmap img = new Bitmap(@"C:\Users\Lime.bmp"); 
     backImage.Image = BackgroundImg; 
     backImage.Width = 700; 
     backImage.Height = 768; 
     backImage.Location = new Point(0, 0); 
     overImage.Image = img; 
     overImage.Width = img.Width; 
     overImage.Height = img.Height; 
     overImage.Parent = backImage; 
     //overImage.BackColor = Color.Transparent; 
     overImage.Location = new Point(200, 200); 

backImage 및 overImage 내가 당신의 문제는 비트 맵 이미지 투명성을 지원하지 않는다는 사실에서 오는 생각 pictureBoxes

+0

아마도이 기사는 도움이 될 것입니다 : http://www.codeproject.com/Tips/201129/Change-Opacity-of-Image-in-C – Csharp

+0

이것을 확인하십시오 : http://devblog.antongochev.net/ 2008/07/30/create-custom-ui-appearance-for-winforms-layered-form-part-5/ –

답변

0

있습니다.

(예를 들어) .PNG으로 시도하고 다음 링크에 설명 된 SetColorKey 방법을 사용 http://msdn.microsoft.com/en-us/library/e7755txx.aspx

+0

이들은 .bmp 파일이지만 압축 된 png 파일입니다. – haysam

+0

확장자 .bmp ** – haysam

+0

"정상적인".png 파일로 다시 저장 하시겠습니까? 왜 그것이 .bmp 파일이되었는지도 모르겠다. 또한 링크에 설명 된 SetColorKey 메서드가 도움이 될 수 있지만 Bitmap 클래스가 아니라 Image 클래스를 사용해야합니다. EDIT : 분명히이 방법은 bmp와도 작동합니다. 그들이 보여주는 예에서 볼 수 있듯이 나는 거기에서만 가정 할 수 있습니다. –

2

귀하의 문제가 overImage.Parent 속성입니다. PictureBox는 부모에 대한 투명도를 지원합니다. 하지만 overImage의 부모는 backImage가 아닌 양식입니다. 따라서 양식을 배경이 아닌 이미지로 볼 수 있습니다. backImage 대신 양식의 BackgroundImage 속성을 사용하면 문제가 해결됩니다.

PictureBox가 ContainerControl이 아니기 때문에 이런 일이 발생했습니다. 그래서 이미지 위에 이미지를 떨어 뜨렸을 때, 은 backImage의 자식 컨트롤 인 것처럼으로 보입니다. 디자이너가 양식을 부모로 만들지 않습니다. Location 속성과 View + (Other Windows) + Document Outline 창에서 알 수 있습니다. 그 창은 부모와 자식의 관계를 아주 분명하게 보여줍니다. 이미지를 드래그하여 backImage의 자식으로 만들려고해도 이미지가 제대로 작동하지 않습니다.

부모 속성을 backImage로 변경할 수 있습니다. in code해야합니다.

또 다른 간단한 해결 방법은 PictureBox 컨트롤을 사용하지 않고 양식의 Paint 이벤트에 이미지를 e.Graphics.DrawImage()로 그립니다. 페인트의 단순한 레이어. 그렇지 않으면 WPF에서 투명성을 구현하는 방식. 두 줄의 코드를 사용하여 UI를 더 빠르게 만듭니다.