Private Sub Command1_Click()
Dim bmp As IPictureDisp
Dim oldbmp As Long
Dim destbmp As Long
Dim memDC As Long
Dim RetVal As Long
Dim destDC As Long
Dim destHeight As Long
Dim destWidth As Long
Dim srcDC As Long
Dim srcHeight As Long
Dim srcWidth As Long
Form1.Show
DoEvents
memDC = CreateCompatibleDC(Form1.hdc)
Set bmp = Picture2.Picture 'LoadPicture(App.Path & "\Loading.jpg")
oldbmp = SelectObject(memDC, bmp.Handle)
destDC = Form1.hdc
destHeight = Form1.ScaleHeight / 2
destWidth = Form1.ScaleWidth / 2
srcDC = memDC
srcHeight = Picture2.ScaleHeight
srcWidth = Picture2.ScaleWidth
BeginPath destDC
RetVal = TransparentBlt(destDC, _
0, 0, _
destWidth, destHeight, _
srcDC, _
0, 0, _
srcWidth, srcHeight, _
RGB(255, 255, 255))
EndPath destDC
Dim hRgn As Long
hRgn = PathToRegion(destDC)
SetWindowRgn destDC, hRgn, True
DeleteObject hRgn
Debug.Print RetVal
RetVal = SelectObject(memDC, oldbmp)
End Sub
В описании ф-ии Path2Region() сказано что между скобками (BeginPath и EndPath) надо сделать Select Path'а в Device Context. Как именно это сделать — непонятно В случае с TextOut() — т.е. когда Path делается из текста — всё понятно, а вот как такую же фигню провернуть с картинкой ???
Re: Как сделать Регион из Bitmap с прозрачными обл. ?
Здравствуйте BugMan, Вы писали:
BM>Делал так (на VB):
BM>[...]
BM>В описании ф-ии Path2Region() сказано что между скобками (BeginPath и EndPath) надо сделать Select Path'а в Device Context. Как именно это сделать — непонятно В случае с TextOut() — т.е. когда Path делается из текста — всё понятно, а вот как такую же фигню провернуть с картинкой ???
Никак. С картинкой это работать не будет. В документации к BeginPath на MSDN перечислены функции, которые можно использовать внутри BeginPath/EndPath. Blt-функций там нет ни одной.
Поставленная задача решается тупым (или не очень) сканированием битов изображения. На VB это может получиться долго.
-- Alex Fedotov
Re[2]: Как сделать Регион из Bitmap с прозрачными обл. ?
AF>Никак. С картинкой это работать не будет. В документации к BeginPath на MSDN перечислены функции, которые можно использовать внутри BeginPath/EndPath. Blt-функций там нет ни одной.
AF>Поставленная задача решается тупым (или не очень) сканированием битов изображения. На VB это может получиться долго.
1) А можно поточнее на счет сканирования битов ? Что значит "сканирование" в принципе ?
2) А что если попробовать сделать саму форму прозрачной — это можно как-нить ? , а на нее уже наложить битмап .......
Задача то вобщем-то стоит просто — Сделать симпатичный SplashScreen — всего-то Я чесно говоря думал что под это кже были стандартные решения
Re[2]: Как сделать Регион из Bitmap с прозрачными обл. ?
Здравствуйте BugMan, Вы писали:
AF>>Никак. С картинкой это работать не будет. В документации к BeginPath на MSDN перечислены функции, которые можно использовать внутри BeginPath/EndPath. Blt-функций там нет ни одной.
AF>>Поставленная задача решается тупым (или не очень) сканированием битов изображения. На VB это может получиться долго.
BM>1) А можно поточнее на счет сканирования битов ? Что значит "сканирование" в принципе ?
Это значит, что ты идешь по всем пикселям изображения и, если пиксель прозрачный, добавляешь его в регион, иначе — пропускаешь. Насчет оптимальности представления региона можно не беспокоиться, поскольку Windows все равно его оптимизирует как надо, объединив смежные пиксели. Единственная проблема, которая может возникнуть — генерация региона таким способом может оказаться достаточно долгой. Тут можно по разному оптимизировать: например, добавлять не отдельные пиксели, а целые горизонтальные отрезки высотой в 1 пиксел.
BM>2) А что если попробовать сделать саму форму прозрачной — это можно как-нить ? , а на нее уже наложить битмап .......
BM>Задача то вобщем-то стоит просто — Сделать симпатичный SplashScreen — всего-то Я чесно говоря думал что под это кже были стандартные решения
В Win2K and later это действительно делается как два байта переслать с помощью layered windows (см. WS_EX_LAYERED, SetLayeredWindowAttributes в MSDN).
-- Alex Fedotov
Re[3]: Как сделать Регион из Bitmap с прозрачными обл. ?
Здравствуйте BugMan, Вы писали:
BM>Хорошо — хер с ней с формой ..... BM>Можно ли как-нить ловить OnPaint экрана (не десктопа, а именно экрана) ?
Можно, но ты этого не хочешь. В NT это требует kernel-драйвера, а в 9x — 16-битного кода (Я как раз последние полтора года только этим занимаюсь, что рисование экрана ловлю)
-- Alex Fedotov
Re[4]: Как сделать Регион из Bitmap с прозрачными обл. ?