Программирование
Веб программирование

Графика в vb. Функция BitBlt. Маска

 
 

Очень часто при работе с графикой нужно сделать прозрачный фон у картинки, т.к. фон картинки может не вписываться в фон формы(ил другого объекта). Можно конешно у формы сделать черный фон, и у рисунка, но будет все уродско.
А вот для создания картинки с прозрачным фоном нужно создать маску этой картинки, а у самой картинки сделать черный фон. Не будем далеко уходить, и возьмем мою фотку. Вместо зеленого фона, сделаем прозрачный. Начнем.
Для начала сделаем у картинки черный фон, и маску(белый фон, а сама картинка черная):

Картинка:

Маска



Для создания маски(и фона самой картинки) я использовал обычный Point(Программы>>Стандартные...), хотя намного удобнее будет в FhotoShope, ил др. граф. редакторах. При создании маски главное чтоб все изображение было черным.
Теперь перейдем к программной части, на форму кинь 2 Picture:
ScaleMode = 3-Pixel
AutoRedraw = True
Visible = False
У Picture1 Picture = "Маска.gif"
У Picture2 Picture = "Картинка.gif(только не просто картинка, а та что с черным фоном)"

Свойства Form1:
Scalemode = 3-Pixel
AutoRedraw = True

И кинь еще кнопку на форму, ОК?
Вот код:

' Объявляем API
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 
Private Sub Command1_Click()
' Рисуем маску на форме(с режимом vbSrcAnd)
BitBlt Form1.hDC, 0, 100, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hDC, 0, 0, vbSrcAnd ' Рисуем саму картинку(с режимом vbSrcPaint)
BitBlt Form1.hDC, 0, 100, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture2.hDC, 0, 0, vbSrcPaint
Form1.Refresh ' Обновляем форму
End Sub

Исходник ищи Здесь.


Есть вопросы? Спроси на нашем форуме!!
Начинающий [07.05.2011 16:23]

А как использовать эту функцию в Visual Basic 2008?

Начинающий [28.05.2011 12:46]

Ну, очень нужно! Умоляю! Кто нибудь помогите!!!...

серко [23.04.2012 19:53]

спс попробую

алексей [23.04.2012 19:54]

начинающий, зайди в чат и найди там людей

серко [23.04.2012 20:09]

хм "metod or data not found"

ALLEX88 [06.03.2016 08:59]

Привет ! А есть способ просчитывать пересечения двух двигающихся объектов, один, допустим по таймеру, а другой с кнопок клавы (хотя вот это последнее вообще неважно), но чтобы можно было просчитывать соприкосновения и прописать для этого действия ?

З.Ы. Да, я пытаюсь написать игру с использованием BitBlt :)) Подскажите, может есть какие-нибудь проекты игр, сделанных по данной технологии, так сказать)

aramkrutoy [01.01.2017 00:44]

не point, a paint)



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.