Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Наложить одно изображение на другое Добавлено: 03.09.09 15:45  

Автор вопроса:  inferno | Web-сайт: www.streamcash.tk
В ходе написание проекта столкнулся с проблемой, нужно на одно изображение наложить другое изображение, но так чтобы второе изображение было прозрачное. Открою секрет, нужно наложить силует человека. Для калибровки в дальнейшем камеры, но это не важно, главное суть в выше описанном. Помогите пожалуйста!

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Андрей



Вопросов: 8
Ответов: 42
 Профиль | | #1 Добавлено: 03.09.09 15:52
Примерно так.

  1.  
  2. ' Накладываем прозрачный рисунок на изображение
  3. Private Sub DrawWatermark(ByVal wm_pic As PictureBox, ByVal bg_pic As _
  4. PictureBox, ByVal x As Integer, ByVal y As Integer)
  5.   Const ALPHA As Byte = 128 'Максимум 255
  6.   Dim transparent As OLE_COLOR
  7.   Dim wm_clr As OLE_COLOR
  8.   Dim bg_clr As OLE_COLOR
  9.   Dim new_clr As OLE_COLOR
  10.   Dim px As Integer
  11.   Dim py As Integer
  12.  
  13.     ' Получим прозрачный цвет
  14.     transparent = wm_pic.Point(0, 0)
  15.  
  16.     ' Комбинируем цвета
  17.     wm_pic.ScaleMode = vbPixels
  18.     bg_pic.ScaleMode = vbPixels
  19.     For py = 0 To wm_pic.ScaleHeight - 1
  20.         For px = 0 To wm_pic.ScaleWidth - 1
  21.             wm_clr = wm_pic.Point(px, py)
  22.             If wm_clr <> transparent Then
  23.                 bg_clr = bg_pic.Point(x + px, y + py)
  24.                 new_clr = CombineColors(wm_clr, bg_clr, ALPHA)
  25.                 bg_pic.PSet (x + px, y + py), new_clr
  26.             End If
  27.         Next px
  28.     Next py
  29. End Sub
  30.  
  31. ' Процедура для обработки цветов
  32. ' возвращает (A * clr1 + (255-A) * clr2)\256
  33. Private Function CombineColors(ByVal clr1 As OLE_COLOR, ByVal clr2 As _
  34. OLE_COLOR, ByVal A As Byte) As OLE_COLOR
  35.   Dim r1 As Long
  36.   Dim g1 As Long
  37.   Dim b1 As Long
  38.   Dim r2 As Long
  39.   Dim g2 As Long
  40.   Dim b2 As Long
  41.  
  42.     b1 = Int(clr1 / 65536)
  43.     g1 = Int((clr1 - (65536 * b1)) / 256)
  44.     r1 = clr1 - ((b1 * 65536) + (g1 * 256))
  45.  
  46.     b2 = Int(clr2 / 65536)
  47.     g2 = Int((clr2 - (65536 * b2)) / 256)
  48.     r2 = clr2 - ((b2 * 65536) + (g2 * 256))
  49.  
  50.     r1 = (A * r1 + (255 - A) * r2) \ 256
  51.     g1 = (A * g1 + (255 - A) * g2) \ 256
  52.     b1 = (A * b1 + (255 - A) * b2) \ 256
  53.  
  54.     CombineColors = r1 + 256 * g1 + 65536 * b1
  55. End Function
  56.  
  57.  
  58. Private Sub Command1_Click()
  59.   DrawWatermark Picture1, Picture2, 0, 0
  60. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 inferno



Вопросов: 8
Ответов: 39
 Web-сайт: www.streamcash.tk
 Профиль | | #2
Добавлено: 03.09.09 16:14
Огромнейшее спасибо!!!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам