Страница: 1 |
Вопрос: Наложить одно изображение на другое
Добавлено: 03.09.09 15:45
Автор вопроса: inferno | Web-сайт: www.streamcash.tk
В ходе написание проекта столкнулся с проблемой, нужно на одно изображение наложить другое изображение, но так чтобы второе изображение было прозрачное. Открою секрет, нужно наложить силует человека. Для калибровки в дальнейшем камеры, но это не важно, главное суть в выше описанном. Помогите пожалуйста!
Ответить
Номер ответа: 1Автор ответа: Андрей
Вопросов: 8Ответов: 42
Профиль | | #1
Добавлено: 03.09.09 15:52
Примерно так.
Private Sub DrawWatermark(ByVal wm_pic As PictureBox, ByVal bg_pic As _
PictureBox, ByVal x As Integer , ByVal y As Integer )
Const ALPHA As Byte = 128
Dim transparent As OLE_COLOR
Dim wm_clr As OLE_COLOR
Dim bg_clr As OLE_COLOR
Dim new_clr As OLE_COLOR
Dim px As Integer
Dim py As Integer
transparent = wm_pic.Point(0, 0)
wm_pic.ScaleMode = vbPixels
bg_pic.ScaleMode = vbPixels
For py = 0 To wm_pic.ScaleHeight - 1
For px = 0 To wm_pic.ScaleWidth - 1
wm_clr = wm_pic.Point(px, py)
If wm_clr <> transparent Then
bg_clr = bg_pic.Point(x + px, y + py)
new_clr = CombineColors(wm_clr, bg_clr, ALPHA)
bg_pic.PSet (x + px, y + py), new_clr
End If
Next px
Next py
End Sub
Private Function CombineColors(ByVal clr1 As OLE_COLOR, ByVal clr2 As _
OLE_COLOR, ByVal A As Byte ) As OLE_COLOR
Dim r1 As Long
Dim g1 As Long
Dim b1 As Long
Dim r2 As Long
Dim g2 As Long
Dim b2 As Long
b1 = Int(clr1 / 65536)
g1 = Int((clr1 - (65536 * b1)) / 256)
r1 = clr1 - ((b1 * 65536) + (g1 * 256))
b2 = Int(clr2 / 65536)
g2 = Int((clr2 - (65536 * b2)) / 256)
r2 = clr2 - ((b2 * 65536) + (g2 * 256))
r1 = (A * r1 + (255 - A) * r2) \ 256
g1 = (A * g1 + (255 - A) * g2) \ 256
b1 = (A * b1 + (255 - A) * b2) \ 256
CombineColors = r1 + 256 * g1 + 65536 * b1
End Function
Private Sub Command1_Click()
DrawWatermark Picture1, Picture2, 0, 0
End Sub
Ответить
Страница: 1 |
Поиск по форуму