4

我正在开发一个利用 Windows 7(和 Vista)任务栏功能的程序。现在我有一个将显示在任务栏缩略图中的自定义位图。位图以编程方式创建并成功显示。我遇到的唯一“问题”是想要在该图像中使用透明,它也应该在缩略图中显示为透明。但没有任何成功,导致标准的浅灰色颜色。

我已经看到证据表明程序成功地在其图像中变得透明:


现在是我的问题:如何在缩略图中变得透明?


我将用Graphics班级填充图像,所以任何事情都是允许的。
我应该提到我使用Windows® API Code Pack,它用于GetHbitmap将图像设置为缩略图。

编辑:
只是为了使它完整,这是我使用 atm 的代码:

Bitmap bmp = new Bitmap(197, 119);

Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, bmp.Width, bmp.Height));  // Transparent is actually light-gray;
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
g.DrawString("Information:", fontHeader, brush, new PointF(5, 5));

bmp.MakeTransparent(Color.Red);
return bmp;
4

2 回答 2

2

您的位图是什么像素格式?如果它没有 Alpha 通道,您将无法在图像中存储透明度信息。

以下是如何使用 Alpha 通道创建位图并使其默认透明:

Bitmap image = new Bitmap(width, height, PixelFormat.Format32bppArgb);
using(Graphics graphics = Graphics.FromImage(image))
{
    graphics.Clear(Color.Transparent);
    // Draw your stuff
}

然后你可以绘制任何你想要的东西,包括使用 Alpha 通道的半透明的东西。

另请注意,如果您尝试在现有不透明的东西上绘制透明度(例如打洞),则需要更改合成模式:

graphics.CompositingMode = CompositingMode.SourceCopy;

这将使您使用的任何颜色覆盖图像中的颜色,而不是与之混合。

于 2011-03-02T01:51:07.190 回答
0

System.Drawing.Bitmap 支持 alpha 级别。所以最简单的方法是

Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.Transparent, new Rectangle(0, 0, bmp.Width, bmp.Height));  // Transparent is actually light-gray;
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
g.DrawString("Information:", fontHeader, brush, new PointF(5, 5));

但是,您也可以通过将 Brushes.Transparent 替换为

new SolidBrush(Color.FromArgb(150, 255, 255, 255));
于 2011-03-01T02:20:09.673 回答