C # - проблема прозрачности Winforms (я схожу с ума с этим) - PullRequest
4 голосов
/ 31 июля 2010

я покажу вам изображение ниже, но перед этим ...

, если вы видели виджеты Yahoo или мультипликационные / тематические скины для Windows Media Player.

я создаю заголовок меньше... фон меньше ... приложение ... выглядит так

альтернативный текст http://fc05.deviantart.net/fs70/f/2010/212/4/c/scrap_by_junaid_saeed.jpg

темный фон, который вы видите, на самом деле мои обои, потому что это снимок экрана ...

для достижения этого .. формы тела и линий, я использую Trasparent PNG .. затем я использую ключ прозрачности формы Win, чтобы сделать его прозрачным .. и изображение загружается в изображениеокно ...

моя проблема в том, что белые точки, которые вы видите по всему контуру тела ... это потому, что пиксели этого PNG в нем не полностью непрозрачные или прозрачные, т.е. полупрозрачные ... так что прозрачностьКлавиша не может сделать фон формы прозрачным в этих пикселях ... и вы видите эти белые точки ...

ну есть ли другой способ сделать форму прозрачной, потому что ...

  • ключ прозрачности wЯ всегда веду себя так, потому что независимо от того, что вы делаете, всегда будут эти полупрозрачные пиксели на изображении на кривых ...

Ответы [ 2 ]

3 голосов
/ 31 июля 2010

Ваши проблемы здесь

  • PNG сглажен
  • Он скомпонован на фоне обычной формы (SystemColors.Control)
  • Если вы сделаетеэтот прозрачный, используя свойство TransparencyKey (которое делает прозрачным single color, но ничего больше), вы получите непрозрачность там, где PNG имеет частичную прозрачность

Пока чтотак ожидалось.Имейте в виду: вы не рисуете частично прозрачный PNG на экране;вы рисуете его на форме, а затем берете конечный результат и делаете один цвет прозрачным.Несмотря на все свои достоинства, ваш PNG может иметь розовый цвет в качестве окружающего цвета, результат будет таким же.

Возможно, вы захотите посмотреть на регионы или не использовать псевдоним PNG, который вы рисуете.

2 голосов
/ 01 августа 2010

Йоханнес упомянул основные проблемы с вашим текущим подходом.

В Windows Forms можно выполнять альфа-смешивание форм, но вам нужно будет использовать вызов Windows API (среди прочего): UpdateLayeredWindow.

В Visual C # есть полезный учебник и исходный код о том, как это сделать для создания профессионально выглядящего заставки.

Единственный недостаток -если ваша форма содержит дочерние элементы управления, такие как кнопки, текстовые поля, они не будут отображаться с использованием UpdateLayeredWindow.Однако вы все равно можете имитировать кнопки и т. Д., Вручную рисуя их как часть фона формы.

...