[so] [WinAPI]Capture Window with Alpha Channel
Alin Popescu
alinpopescu at live.com
Tue Jun 16 01:18:20 EEST 2009
Salut
Multumesc pentru raspunsul rapid.
Ideea e ca orice fereastra de windows are transparenta. La XP ea e se
poate observa la colturile ferestrelor, care sunt netede
(rotunde). Eu incerc sa salvez si alpha channel din device context-ul unde
se renderizeaza fereastra ca apoi,
in Direct3D, sa apara la fel de netede.
Pana acum nu am reusit sa salvez decat RGB + A constant. Prin urmare in
colturi imi apare o zona neagra.
Alpha-ul texturii e 255 constant. As putea sa fac un pixel shader si sa ma
folosesc de alpha test
ca sa scot colturile negre, dar apare o problema daca in ferestra exista
pixeli negrii(de exemplu text).
On Tue, 16 Jun 2009 01:10:15 +0300, Daniel Flamaropol
<raptorclw at gmail.com> wrote:
> Salut.
>
> Ce vrei sa spui prin "nu reusesc sa salvez si alpha channel" ?. Din ce am
> inteles eu, vrei sa faci un print screen la o fereastra.
> Unde ar fi alpha channel acolo? De asemenea, ce intelegi prin "ferestre
> 3D
> cu transparenta"?
>
> Presupun ca vrei sa faci o fereastra de Direct3D care sa para
> transparenta,
> la fiecare frame facand un capture la ce se afla
> in spatele ei, si randand respectiva textura in Direct3D (pe un quad
> eventual). Asta e?
>
> Numai bine,
> Dani
>
> 2009/6/16 Andrei Cibotaru <andreicibotaru at gmail.com>
>
>> Pai nu poti sa ii dai tu din direct3d transparenta?
>>
>> 2009/6/16 Alin Popescu <alinpopescu at live.com>
>>
>> Salut!
>>>
>>> Nu are legatura cu ce s-a facut pe la so, dar are legatura cu mult prea
>>> obscurul WinAPI.
>>> Incerc sa fac o captura de fereastra si sa salvez pixelii intr-o
>>> textura
>>> de Direct3D. In final ferestre 3D cu transparenta :)
>>>
>>> Problema mea e ca nu reusesc sa salvez si alpha channel din fereastra.
>>> Am incercat sa folosesc si GetDIBits, dar fara rezultate.
>>>
>>> Poate a mai incercat cineva de pe aici si i-a gasit solutie.
>>> L-as ruga sa o impartaseasca cu comunitatea de WinAPI devs.
>>>
>>> void CaptureWindow(HWND hWnd, LPDIRECT3DTEXTURE9 Tex)
>>> {
>>> HDC hdcWindow = GetWindowDC(hWnd);
>>> HDC hdcMemory = CreateCompatibleDC(hdcWindow);
>>> HBITMAP hBitmap = CreateCompatibleBitmap(hdcWindow, Width, Height);
>>> hOld = SelectObject(hdcMemory, hBitmap);
>>> bool bResult = PrintWindow(hWnd, hdcMemory, 0);
>>>
>>> D3DLOCKED_RECT rect;
>>> Tex->LockRect(0, &rect, NULL, D3DLOCK_DISCARD);
>>> GetBitmapBits(hBitmap, Width * Height * 4, rect.pBits);
>>> Tex->UnlockRect(0);}
>>>
>>> SelectObject(hdcMemory, hOld);
>>> DeleteObject(hBitmap);
>>> DeleteDC(hdcMemory);
>>> ReleaseDC(hWnd, hdcWindow);
>>> }
>>>
>>> Thanx in advance.
>>> _______________________________________________
>>> so mailing list
>>> so at cursuri.cs.pub.ro
>>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>>>
>>
>>
>>
>> --
>> Cibo
>>
>> _______________________________________________
>> so mailing list
>> so at cursuri.cs.pub.ro
>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>>
>>
--
More information about the so
mailing list