Как сделать Регион из Bitmap с прозрачными обл. ?
От: BugMan  
Дата: 11.03.02 19:11
Оценка:
Делал так (на VB):

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 с прозрачными обл. ?
От: Alex Fedotov США  
Дата: 11.03.02 19:16
Оценка:
Здравствуйте 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 с прозрачными обл. ?
От: BugMan  
Дата: 11.03.02 19:30
Оценка:
AF>Никак. С картинкой это работать не будет. В документации к BeginPath на MSDN перечислены функции, которые можно использовать внутри BeginPath/EndPath. Blt-функций там нет ни одной.

AF>Поставленная задача решается тупым (или не очень) сканированием битов изображения. На VB это может получиться долго.


1) А можно поточнее на счет сканирования битов ? Что значит "сканирование" в принципе ?
2) А что если попробовать сделать саму форму прозрачной — это можно как-нить ? , а на нее уже наложить битмап .......

Задача то вобщем-то стоит просто — Сделать симпатичный SplashScreen — всего-то Я чесно говоря думал что под это кже были стандартные решения
Re[2]: Как сделать Регион из Bitmap с прозрачными обл. ?
От: BugMan  
Дата: 11.03.02 19:32
Оценка:
Хорошо — хер с ней с формой .....
Можно ли как-нить ловить OnPaint экрана (не десктопа, а именно экрана) ?
Re[3]: Как сделать Регион из Bitmap с прозрачными обл. ?
От: Alex Fedotov США  
Дата: 11.03.02 19:49
Оценка:
Здравствуйте 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 с прозрачными обл. ?
От: Alex Fedotov США  
Дата: 11.03.02 19:51
Оценка:
Здравствуйте BugMan, Вы писали:

BM>Хорошо — хер с ней с формой .....

BM>Можно ли как-нить ловить OnPaint экрана (не десктопа, а именно экрана) ?

Можно, но ты этого не хочешь. В NT это требует kernel-драйвера, а в 9x — 16-битного кода (Я как раз последние полтора года только этим занимаюсь, что рисование экрана ловлю)
-- Alex Fedotov
Re[4]: Как сделать Регион из Bitmap с прозрачными обл. ?
От: BugMan  
Дата: 11.03.02 19:56
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

Ладно Спасиба за помощь !!!
Буду разбираться .....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.