2009-07-27 3 views
3

배경 무늬를 그려 넣지 않고 다른 이미지 위에 그려야합니다. 내가 그리는 이미지는 별입니다. 지도 이미지 위에 별을 몇 개 넣고 싶습니다..NET CF 2.0 : 배경 투명도가있는 이미지 위에 PNG 그리기

별의 이미지에 흰색 배경이 있고지도 위에 그림을 그릴 때 흰색 배경이 나타납니다. 별을 그릴 수

내 방법은 다음과 같이이다 :

Graphics graphics = Graphics.FromImage(map); 
Image customIcon = Image.FromFile("../../star.png"); 
graphics.DrawImage(customIcon, x, y); 

나는 투명 배경에서 이미지 (PNG 및 GIF 형식)을 시도하고, 항상 별을 둘러싼 뭔가를 그립니다. 배경없이 별을 그릴 수있는 방법은 무엇입니까?

이 프로그램은 Windows Mobile 5.0 이상, Compact Framework 2.0 SP2 및 C# 용입니다.

는이 코드로 시도 :

Graphics g = Graphics.FromImage(mapa); 
Image iconoPOI = (System.Drawing.Image)Recursos.imagenPOI; 
Point iconoOffset = new Point(iconoPOI.Width, iconoPOI.Height); 

System.Drawing.Rectangle rectangulo; 
ImageAttributes transparencia = new ImageAttributes(); 
transparencia.SetColorKey(Color.White, Color.White); 

rectangulo = new System.Drawing.Rectangle(x, y, iconoPOI.Width, iconoPOI.Height); 
g.DrawImage(iconoPOI, rectangulo, x, y, iconoPOI.Width, iconoPOI.Height, GraphicsUnit.Pixel, transparencia); 

하지만지도에 아무것도 표시되지 않습니다.

XY 내가 그것을 흰색 배경의 PNG의 된 imagen 년대 iconoPOI을 그리려는 데 좌표입니다.

감사합니다.

+0

또한 스타 이미지의 배경이 순수한 흰색이 아니기 때문에 투명도 효과가 엉망이 될 수 있습니다. – MusiGenesis

답변

1
한 올바른 해답이 여기에서 찾을 수 있습니다

:

Answer

감사합니다!

0

일반적으로이 작업은 매우 복잡합니다 (Windows API BitBlt 기능을 탭하고 흑백 마스크 이미지 및 기타 항목을 만들어야 함).하지만 여기서는 간단한 방법이 있습니다.

당신이 당신의 배경 이미지 (bmpMap)에 대해 하나의 비트 맵을 가지고 당신의 스타 이미지 (bmpStar) 하나, 당신은,이 방법은 당신이 필요로 할 것입니다 (xoffset이, yoffset)에서 별을 그릴 필요 가정 :

for (int x = 0; x < bmpStar.Width; x++) 
{ 
    for (int y = 0; y < bmpStar.Height; y++) 
    { 
     Color pixel = bmpStar.GetPixel(x, y); 
     if (pixel != Color.White) 
     { 
      bmpMap.SetPixel(x + xoffset, y + yoffset, pixel); 
     } 
    } 
} 

SetPixel과 GetPixel의 속도가 매우 느립니다. (선호되는 방법은 비트 맵의 ​​LockBits 메서드를 사용하는 것입니다 - 여기에 사용 방법을 설명하는 질문이 있지만) 시작하게됩니다.

관련 문제