DirectX screenshot
6 отговора
224 прегледа
DirectX screenshot
..или нещо подобно..
Разбрах че за да направя screenshot на всичко, което е на екрана, в това число прозрачни прозорци, screenshot на филм се използва DirectX ? някой да се е сблъсквал с такова нещо...
?
Разбрах че за да направя screenshot на всичко, което е на екрана, в това число прозрачни прозорци, screenshot на филм се използва DirectX ? някой да се е сблъсквал с такова нещо...
ц, но все пак
ц, и аз съм се мъчил да шот-вам филми, но не става токутака,
иначе стандартен винскрийшот се прави с нещо като
-
И после ТБитМап.Bitmap.LoadFromClipBoard(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap), 0)
Обаче това няма да хване филм в медиа плейъра
-------------
Special killer double trouble triple extra nicotine monster!
иначе стандартен винскрийшот се прави с нещо като
procedure ScreenShot;
var
sDC: HDC;
sHandle: HWnd;
sBMP: TBitmap;
begin
sHandle := GetDeskTopWindow;
sDC := GetDC(sHandle);
try
sBMP := TBitMap.Create;
try
sBMP.Width := Screen.Width;
sBMP.Height := Screen.Height;
BitBlt(sBMP.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, sDC, 0, 0, SRCCOPY);
Clipboard.Assign(sBMP)
finally
FreeAndNil(sBMP)
end
finally
ReleaseDC(sHandle, sDC)
end
end;
-
И после ТБитМап.Bitmap.LoadFromClipBoard(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap), 0)
Обаче това няма да хване филм в медиа плейъра
-------------
Special killer double trouble triple extra nicotine monster!
Re: ц, но все пак
За филмите никога няма да стане май защото ползват хардуерния овърлей на видеото ;-)))) - и май няма начин да се заобиколи -освен ако не прехванеш потока чрез филтър(като тези които пишат титрите) ама това май няма да стане с Делфи ;-))) - или ще стане доста трудно.
---

---
Re: DirectX screenshot
Ех.... все ми се струва че и аз някъде бях виждал нещо, с което ставаше номера, но може и да се бъркам. Все пак, Благодаря на всеки който се опита да помогне, аз ще продължавам да проучвам въпроса (когато се сетя) и ще пиша ако има нещо ново :)
--
Георги
--
Георги
Не съм сигурен дали....
това ще помогне -даже съм по4ти съм сигурен че няма - макар да не съм го виждал ама погледни
[линк]
---

[линк]
---
Re: DirectX screenshot
Това е част от кода на проект върху който работя , така че тествано многократно и работи :
procedure WindowedShot;
var
frontbuff : IDirect3DSurface9 ;
x, y : integer ;
rcWindow : TRECT ;
begin
x := Screen.Width;
y := Screen.Height ;
if( FAILED(fMyApp.m_pd3dDevice.CreateOffscreenPlainSurface(x, y, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, frontbuff, 0)))then
exit ;
if( FAILED(fMyApp.m_pd3dDevice.GetFrontBufferData(0, frontbuff))) then
begin
frontbuff := nil ;
Exit ;
end;
D3DXSaveSurfaceToFile('C:\TestShot.bmp', D3DXIFF_BMP, frontbuff, nil,nil );
end;
Снима филми , прозрачни прозорци и т.н.
Трябва да юзнеш Direct3D9, D3DX9 както и да създадеш Device-a преди това.
Успех.
procedure WindowedShot;
var
frontbuff : IDirect3DSurface9 ;
x, y : integer ;
rcWindow : TRECT ;
begin
x := Screen.Width;
y := Screen.Height ;
if( FAILED(fMyApp.m_pd3dDevice.CreateOffscreenPlainSurface(x, y, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, frontbuff, 0)))then
exit ;
if( FAILED(fMyApp.m_pd3dDevice.GetFrontBufferData(0, frontbuff))) then
begin
frontbuff := nil ;
Exit ;
end;
D3DXSaveSurfaceToFile('C:\TestShot.bmp', D3DXIFF_BMP, frontbuff, nil,nil );
end;
Снима филми , прозрачни прозорци и т.н.
Трябва да юзнеш Direct3D9, D3DX9 както и да създадеш Device-a преди това.
Успех.
Re: DirectX screenshot
Мммдаа :)
Благодаря ти за мнението, такава трябва да е хватаката :)


Благодаря ти за мнението, такава трябва да е хватаката :)