Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Степень прозрачности Добавлено: 13.09.09 12:58  

Автор вопроса:  Leon29
Добрый день.

Исходные данные:
Видели как на сайте контакта выделить на фотографии человека? Когда наносится прямоугольник (это и есть то, что или кого нужно выделить) за его границами картинка темнеет.

Хочу сделать в своей программе тоже самое. Например в picturebox загружаю фотографию и в нем же выделяю человека. Чтобы сделать затемнение, как я думаю, нужно сверх фотографии положить:

1. Элемент shape с черной заливкой
2. Еще одну картинку черного цвета

Потом сделать прозрачность например 50%.

Вопрос: как?

Юзал поиск. Там прозрачность либо формы, либо на 100%.

Ответить

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

Номер ответа: 1
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 13.09.09 13:07
Гугли: AlphaBlend

Ответить

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



Вопросов: 80
Ответов: 476
 Профиль | | #2 Добавлено: 13.09.09 14:51
vbd unit- у тебя 1 ответ)))

Ответить

Номер ответа: 3
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #3 Добавлено: 13.09.09 14:53
я это делаю тупым перебором пикселов, предварительно закинув картинку в переменную типа Bitmap.
http://vbnet.ru/forum/show.aspx?id=195890

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 13.09.09 16:30
На форму кинь Picture1 - с картинкой, и пустой Picture2 - с Backcolor к примеру черным
  1. Option Explicit
  2. Dim posx(1) As Integer
  3. Dim posy(1) As Integer
  4. Dim status As Integer '0 - необходимо нажатие для заполнения первой точки
  5.                       '1 - --//-- второй точки
  6.  
  7. 'This project requires two picture boxes
  8. 'Both picture boxes should contain a picture
  9. Const AC_SRC_OVER = &H0
  10. Private Type BLENDFUNCTION
  11.   BlendOp As Byte
  12.   BlendFlags As Byte
  13.   SourceConstantAlpha As Byte
  14.   AlphaFormat As Byte
  15. End Type
  16. Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
  17. Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)
  18.  
  19. Private Sub Form_Load()
  20.     'Set the graphics mode to persistent
  21.     Picture1.AutoRedraw = True
  22.     Picture2.AutoRedraw = True
  23.     'API uses pixels
  24.     Picture1.ScaleMode = vbPixels
  25.     Picture2.ScaleMode = vbPixels
  26.     draw
  27. End Sub
  28.  
  29. Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  30.     Select Case status
  31.     Case 0:
  32.         status = 1
  33.         posx(0) = X
  34.         posy(0) = Y
  35.     Case 1:
  36.         status = 0
  37.         posx(1) = X
  38.         posy(1) = Y
  39.         If posx(0) > posx(1) Then swap posx(0), posx(1)
  40.         If posy(0) > posy(1) Then swap posy(0), posy(1)
  41.         draw
  42.     End Select
  43. End Sub
  44.  
  45. Private Sub draw()
  46.     'KPD-Team 2000
  47.     'URL: http://www.allapi.net/
  48.     'E-Mail: KPDTeam@Allapi.net
  49.     Dim BF As BLENDFUNCTION, lBF As Long
  50.     'set the parameters
  51.     With BF
  52.         .BlendOp = AC_SRC_OVER
  53.         .BlendFlags = 0
  54.         .SourceConstantAlpha = 80
  55.         .AlphaFormat = 0
  56.     End With
  57.     'copy the BLENDFUNCTION-structure to a Long
  58.     RtlMoveMemory lBF, BF, 4
  59.     Picture1.Cls
  60.     'AlphaBlend the picture from Picture1 over the picture of Picture2
  61.     AlphaBlend Picture1.hdc, 0, 0, posx(0), Picture1.ScaleHeight, Picture2.hdc, 0, 0, 1, 1, lBF
  62.     AlphaBlend Picture1.hdc, posx(0), 0, posx(1) - posx(0), posy(0), Picture2.hdc, 0, 0, 1, 1, lBF
  63.     AlphaBlend Picture1.hdc, posx(0), posy(1), posx(1) - posx(0), Picture1.ScaleHeight - posy(1), Picture2.hdc, 0, 0, 1, 1, lBF
  64.     AlphaBlend Picture1.hdc, posx(1), 0, Picture1.ScaleWidth - posx(1), Picture1.ScaleHeight, Picture2.hdc, 0, 0, 1, 1, lBF
  65.     Picture1.Refresh
  66. End Sub
  67.  
  68. Private Sub swap(ByRef v1 As Integer, ByRef v2 As Integer)
  69.     Dim v As Integer
  70.     v = v1
  71.     v1 = v2
  72.     v2 = v
  73. End Sub

Ответить

Номер ответа: 5
Автор ответа:
 Leon29



Вопросов: 2
Ответов: 3
 Профиль | | #5 Добавлено: 13.09.09 21:36
Работает! Спасибо!

p.s. По радио слышал, сегодня неофициальный день программиста,т.к. 256 день по счету))

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 13.09.09 21:50
Leon29, официальный как раз-таки) начиная с этого года

Ответить

Страница: 1 |

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



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