Сайт Влада

Как нанести изображение полупрозрачно?

Сейчас мы будем наносить изображение на форму со степенью прозрачности. Вообще, его можно нанести также и на PictureBox и даже на чужую форму, но для начала остановимся на этом. Итак все что вам нужно - это Visual Basic, форма и Picture1, расположенный на ней с рисунком, желательно небольшим.

Для начала, создайте модуль и поместите следующий код:

Public Declare Function AlphaBlending Lib "msimg32" Alias "AlphaBlend" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal BF As Long) As Long

Public Function AlphaBlend(ByVal DestHDC As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal DestWidth As Long, ByVal DestHeight As Long, ByVal srcHDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal srcWidth As Long, ByVal srcHeight As Long, ByVal AlphaSource As Long) As Long
Dim lngBlend As Long, res As Long
lngBlend = Val("&h" & Hex(AlphaSource) & "00" & "00")
res = AlphaBlending(DestHDC, XDest, YDest, DestWidth, DestHeight, srcHDC, xSrc, ySrc, srcWidth, srcHeight, lngBlend)
AlphaBlend = res
End Function

К функции AplhaBlending мы будем обращаться через функцию-посредника - AlphaBlend, чтобы упростить ввод параметра AlphaSource, который в оригинальную функцию надо вводить в HEX с кучей других дополнений.

Теперь отвлечемся от исходников и вернемся к нашей форме. Для того чтобы наш код работал, нам нужно установить несколько важных свойств и настроек.

Вставьте в процедуру загрузки формы следующий код, жизненно-важный для работы нашей функции:

Me.AutoRedraw = True
Me.ScaleMode = 3
Picture1.AutoRedraw = True
Picture1.AutoSize = True
Picture1.Visible = False
Picture1.ScaleMode = 3

В этом коде мы также скрыли PictureBox, что он не мешался.

Если вы зайдете в панель свойств VB, то увидите, что у формы и рисунка свойство HasDC = True. Это заставляет Windows создать для этих объектов контекст устройства — область для рисования и содержания графики, она представляется свойством .hDC, которое передается нашей функции с которого она будет рисовать и срисовывать.

Если объект скрыт, VB не перерисовывает его контекст, так что нам необходимо активировать свойство AutoRedraw как у рисунка, так и у формы.
Не менее важно установить у формы и рисунка режим работы с пикселями, так как АПИ-функции работают именно с ними.

Ну, и наступил момент кульминации, все готово, чтобы заработала наша функция. Дополните код загрузки формы последним куском:

Call AlphaBlend(Me.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 150)

Обратите также внимание на последний параметр. Он отвечает за прозрачность. Наверное, вы удивитесь: как это так - прозрачность 150%? На самом деле никаких процентов здесь нет. Функция работает с цветами в режиме RGB, так что прозрачность от 0 до 255 соответственно.

Ну, ладно, не буду Вас больше мучить, запустите проект и глазейте на форму =)


Оригинальная статья Влада Рубцова. https://vladikcomper.scanf.su/