|
#1
|
|||
|
|||
таймер и BitBlt
Добрый день ув. люди В общем нужно получать скриншоты экрана (вернее областей экрана) постоянно (тобишь в таймере или потоке). Но даже если брать небольшую область размером 100х100 с помощью Вин Апишной функции BitBlt то появляються нормальные тормоза. Как избежать этого? Или лучше воспользоваться DirectDraw? ЧИтал про него, но муть полная. Мало что понял. Подскажите что делать.
п.с. форум читал, но нужного ответа так и не нашел. п.п.с был бы благодарен примеру получения скрина через directx в данный момент получаю скрин так: Код:
procedure TForm1.FormCreate(Sender: TObject); begin b:=TBitmap.Create; b.Width:=105; b.Height:=105; MainDC:=GetDC(0); end; procedure TForm1.FormDestroy(Sender: TObject); begin b.Free; ReleaseDC(MainDC,0); end; procedure TForm1.Timer1Timer(Sender: TObject); begin BitBlt(b.Canvas.Handle,0,0,105,105,MainDC,0,0,SrcCopy); end; |
#2
|
||||
|
||||
С DirectDraw не делал, но попробовал делать по твоему принципу, 25 кадров/сек, гонит проца на 30 процентов. Если это делать с помощью FastStone Capture (10 кадров/сек), но еще и с конвертацией в AVI, - 95-97%. Все делалось на фуллскрине. DirectDraw, ИМХО, мало что даст. Все-таки это работа не с видеопамятью, а с оперативной. Возможно, в Win Vista/Win 7 с помощью DirectX 10/11 можно и побыстрее.
|
#3
|
|||
|
|||
http://www.progdigy.com/forums/viewt...b90d e9bf964f
что-то вроде этого, но там ещё тормознее (не помню точно, когда пробовал то этот или похожий код или вообще не работал, или не хотел делать снимок с видео плеера) >woweook< |