Как сделать область на миниатюре панели задач прозрачной в Windows 7?

Я разрабатываю программу, которая использует функции панели задач 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;

person jerone    schedule 27.02.2011    source источник


Ответы (2)


Какой формат пикселей у вашего растрового изображения? Если у него нет альфа-канала, вы не сможете сохранить информацию о прозрачности в своем изображении.

Вот как создать растровое изображение с альфа-каналом и сделать его прозрачным по умолчанию:

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

Затем вы можете рисовать все, что захотите, включая полупрозрачные предметы, используя альфа-канал.

Также обратите внимание, что если вы пытаетесь нарисовать прозрачность поверх существующего непрозрачного материала (скажем, чтобы сделать отверстие), вам нужно изменить режим композитинга:

graphics.CompositingMode = CompositingMode.SourceCopy;

Это сделает любой цвет, который вы используете для перезаписи цвета на изображении, а не смешивания с ним.

person Coincoin    schedule 02.03.2011

System.Drawing.Bitmap поддерживает альфа-уровень. Итак, самый простой способ

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));
person Chris McGrath    schedule 01.03.2011