进行屏幕截图时候,有部分机器不会,部分机器会瞬间停顿一下。cpu占用率也很高。因为要进行频繁抓图,不知道如何解决这个问题。谢谢各位大侠。屏幕抓图的代码如下
procedure TFrmClient.GetTargetBmp;
var
dc: HDC;
iII: LongBool;
begin
dc := GetDC(GetDesktopWindow);
repeat
iII := StretchBlt(TheNewScrBmp.Canvas.Handle, 0, 0, TheNewScrBmp.Width,
TheNewScrBmp.Height, dc, 0, 0,
Screen.Width, Screen.Height, SRCCOPY);
until iII = True;
ReleaseDC(GetDesktopWindow, dc);
end;
procedure TFrmClient.GetTargetBmp;
var
dc: HDC;
iII: LongBool;
begin
dc := GetDC(GetDesktopWindow);
repeat
iII := StretchBlt(TheNewScrBmp.Canvas.Handle, 0, 0, TheNewScrBmp.Width,
TheNewScrBmp.Height, dc, 0, 0,
Screen.Width, Screen.Height, SRCCOPY);
until iII = True;
ReleaseDC(GetDesktopWindow, dc);
end;
解决方案 »
- delphi中如何将EXCEL里的资料填入数据库中,急
- 关于创建多线程的问题
- 提示no active mdi form curuntly actived 什么意思呀?
- 大家帮忙看看下面的代码该怎么优化?delphi6+access2000
- 怎样显示或保存成Excel?????????
- 怎么将文本文件读入到数据库中,满意例子给出立刻加分!
- 怎样设置组件TTable使DEPHI调用Database Desktop建的表?
- 向曾经使用过delphi5.0的程序员请教
- 如何将table1.state从edit状态改成browse状态?
- 生存问题!非常需要你的帮助或是建议
- delphi 里面的PROJECT OPTION 有个版本信息 怎么成了灰色 我无法编辑
- 请问,Tquery的批量提交是怎么处理的
循环里面加入application.processmessages; 还是没有任何变化
“一直抓”这种动作不好。
普通屏幕12足够,30就流畅了,你抓那么多干吗?
procedure TFrmClient.GetTargetBmp3;
var
dc: HDC;
ABegin: Cardinal;
begin
dc := GetDC(0);
ABegin := GetTickCount;
BitBlt(TheNewScrBmp.Canvas.Handle, 0, 0,
TheNewScrBmp.Width, TheNewScrBmp.Height, dc, 0, 0, SRCCOPY);
ReleaseDC(0, dc);
suiForm1.Caption := IntToStr(GetTickCount - ABegin);
end;
速度还是没有变化 在显卡比较好的机器上一个屏幕抓图时间60-70毫秒 ,在有显卡差的机器上则需要800多毫秒,差距也太大了。。
想快,就需要VGA的Mirror驱动程序实现
例如VNC这类的
ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)
对 “VGA的Mirror驱动程序实现” 能不能讲的更具体点呢?
ABegin := GetTickCount;
Keybd_event(VK_SNAPSHOT, MapVirtualKey(VK_SNAPSHOT, 0), 0, 0);
Keybd_event(VK_SNAPSHOT, MapVirtualKey(VK_SNAPSHOT, 0), keyeventf_keyup, 0);
if Clipboard.HasFormat(CF_BITMAP) then
begin
Bitmap := TBitMap.Create;
Bitmap.Width := Screen.Width;
Bitmap.Height := Screen.Height;
try
Bitmap.Assign(Clipboard);
Image3.Picture.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;
FrmClient.suiForm1.Caption := IntToStr(GetTickCount - ABegin);
用模拟printScreen实现,速度比原先更慢。。 这个应该是意料之中的
结帖,谢谢各位大侠。