我想在不绘制背景的情况下在其他地方绘制图像。我要画的图像是一个明星。我想把一些星星放在地图图像上。
问题是星星的图像有白色背景,当我在地图上绘制时会出现白色背景。
我绘制星星的方法是这样的:
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);
但我在地图上看不到任何内容。
X 和 Y 是我想要绘制iconoPOI的de坐标,它是具有白色背景的PNG图像。
谢谢!
答案 0 :(得分:1)
答案 1 :(得分: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方法 - 这里有关于如何使用它的SO的问题),但这会让你开始。