Как нанести изображение, сделав фоновый цвет прозрачным?
Допустим, вы делаете игру. Вы уже нарисовали кучу анимаций - изображений, где по порядку расположены все кадры, например, движений человечка на белом фоне. Вы делаете игру стандартными средствами ВБ - рисунок вы помещаете в PictureBox, но вот когда начинаете рисовать человечка на форме появляется большая проблемма - даже если изображение записано в GIF с прозрачным фоном, от куда бы вы его не срисовывали — с Image ли, или с PictureBox'а — вокруг него появится белый фон!
Такую проблему ВБ-шными средствами не решишь, зато есть подходящая специально для этого АПИ-функция — DrawTransparent.
Итак, создайте проект с формой, поместите туда модуль и объявите функцию:
Теперь вернемся к форме. Итак, нам понадобиться PictureBox с названием Picture1, который содержит в себе рисунок с белым фоном (в примере будет рассматриваться именно белый фон). Кстати, если вы загрузили GIF-изображение с прозрачным фоном, поставьте Picture1.BackColor = vbWhite.
Чтобы наша функция работала, необходимо настроить некоторые свойства у формы и рисунка. В событие Form_Load вставите следующий код:
Me.ScaleMode = 3
Picture1.AutoRedraw = True
Picture1.AutoSize = True
Picture1.Visible = False
Picture1.ScaleMode = 3
Если вы зайдете в панель свойств VB, то увидите, что у формы и рисунка свойство HasDC = True. Это заставляет Windows создать для этих объектов контекст устройства - область для рисования и содержания графики, она представляется свойством .hDC, которое передается нашей функции с которого она будет рисовать и срисовывать.
Если объект скрыт, VB не перерисовывает его контекст, так что нам необходимо активировать свойство AutoRedraw как у рисунка, так и у формы.
Не менее важно установить у формы и рисунка режим работы с пикселями, так как АПИ-функции работают именно с ними.
А также, как я заметил, функция работает некорректно, если размер PictureBox'а меньше размера содержащегося в нем рисунка. А сам PictureBox лучше скрыть, чтобы он не мешался.
И вот все готово, чтобы заработала наша функция, дополните процедуру загрузки формы последней строкой:
Смело запускайте проект и глядите на форму!
Оригинальная статья Влада Рубцова. https://vladikcomper.scanf.su/