Страница: 1 |
Вопрос: Степень прозрачности
Добавлено: 13.09.09 12:58
Автор вопроса: Leon29
Добрый день.
Исходные данные:
Видели как на сайте контакта выделить на фотографии человека? Когда наносится прямоугольник (это и есть то, что или кого нужно выделить) за его границами картинка темнеет.
Хочу сделать в своей программе тоже самое. Например в picturebox загружаю фотографию и в нем же выделяю человека. Чтобы сделать затемнение, как я думаю, нужно сверх фотографии положить:
1. Элемент shape с черной заливкой
2. Еще одну картинку черного цвета
Потом сделать прозрачность например 50%.
Вопрос: как?
Юзал поиск. Там прозрачность либо формы, либо на 100%.
Ответить
Номер ответа: 4Автор ответа: Winand
Вопросов: 87Ответов: 2795
Web-сайт: winandfx.narod.ru Профиль | | #4
Добавлено: 13.09.09 16:30
На форму кинь Picture1 - с картинкой, и пустой Picture2 - с Backcolor к примеру черным
Option Explicit
Dim posx(1) As Integer
Dim posy(1) As Integer
Dim status As Integer
Const AC_SRC_OVER = &H0
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
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
Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long )
Private Sub Form_Load()
Picture1.AutoRedraw = True
Picture2.AutoRedraw = True
Picture1.ScaleMode = vbPixels
Picture2.ScaleMode = vbPixels
draw
End Sub
Private Sub Picture1_MouseDown(Button As Integer , Shift As Integer , X As Single , Y As Single )
Select Case status
Case 0:
status = 1
posx(0) = X
posy(0) = Y
Case 1:
status = 0
posx(1) = X
posy(1) = Y
If posx(0) > posx(1) Then swap posx(0), posx(1)
If posy(0) > posy(1) Then swap posy(0), posy(1)
draw
End Select
End Sub
Private Sub draw()
Dim BF As BLENDFUNCTION, lBF As Long
With BF
.BlendOp = AC_SRC_OVER
.BlendFlags = 0
.SourceConstantAlpha = 80
.AlphaFormat = 0
End With
RtlMoveMemory lBF, BF, 4
Picture1.Cls
AlphaBlend Picture1.hdc, 0, 0, posx(0), Picture1.ScaleHeight, Picture2.hdc, 0, 0, 1, 1, lBF
AlphaBlend Picture1.hdc, posx(0), 0, posx(1) - posx(0), posy(0), Picture2.hdc, 0, 0, 1, 1, lBF
AlphaBlend Picture1.hdc, posx(0), posy(1), posx(1) - posx(0), Picture1.ScaleHeight - posy(1), Picture2.hdc, 0, 0, 1, 1, lBF
AlphaBlend Picture1.hdc, posx(1), 0, Picture1.ScaleWidth - posx(1), Picture1.ScaleHeight, Picture2.hdc, 0, 0, 1, 1, lBF
Picture1.Refresh
End Sub
Private Sub swap(ByRef v1 As Integer , ByRef v2 As Integer )
Dim v As Integer
v = v1
v1 = v2
v2 = v
End Sub
Ответить
Страница: 1 |
Поиск по форуму