假设有如下代码(随意些的,没有调试):
var
Dc: HDC;
Bmp: TBitmap;
begin
Bmp:= TBitmap.create;
Bmp.width:= Screen.Width;
Bmp.Height:= Screen.height;
DC:= GetDC(0); //如何将DC中的内容快速的画到Bmp中,最好能在10毫秒内完成 Bmp.free;
ReleaseDC(nil, 0);
end;
var
Dc: HDC;
Bmp: TBitmap;
begin
Bmp:= TBitmap.create;
Bmp.width:= Screen.Width;
Bmp.Height:= Screen.height;
DC:= GetDC(0); //如何将DC中的内容快速的画到Bmp中,最好能在10毫秒内完成 Bmp.free;
ReleaseDC(nil, 0);
end;
解决方案 »
- OpenProcess的第一个权限参数用什么比较好?
- CxPivotGrid难题
- 谁有Developer Express Inc 系列控件组 for Delphi7的介绍文档?
- 显示图片并可放大,缩小,画圆...
- 关于Richedit的一个问题,如何定位到文本选中的位置
- 几个格式化字符串的问题。即时结贴
- 请问如何用delphi设计像qicq上的组
- 请教:如何显示数据库中指定文件名的图片?
- 如何动态创建exe文件?
- 关于文件的传送
- 怎么在程序运行期间设置DBgridEh控件是多选。就是DBgridEh1->options->dgmultiselect 是true
- 关于MDI窗体创建时发生EInvalidOperation异常的问题
Dc: HDC;
Bmp: TBitmap;
begin
Bmp:= TBitmap.create;
Bmp.width:= Screen.Width;
Bmp.Height:= Screen.height;
DC:= GetDC(0); Bmp.Canvas.Handle := DC;
//如何将DC中的内容快速的画到Bmp中,最好能在10毫秒内完成 Bmp.free;
ReleaseDC(0, DC);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Dc: HDC;
Bmp: TBitmap;
begin
Bmp:= TBitmap.create;
Bmp.width:= Screen.Width;
Bmp.Height:= Screen.height;
DC:= GetDC(0); Bmp.Canvas.Handle := DC;
//如何将DC中的内容快速的画到Bmp中,最好能在10毫秒内完成 Canvas.CopyRect(Rect(0, 0, 200, 200), Bmp.Canvas, Rect(0, 0, 200, 200));
Bmp.free;
ReleaseDC(0, DC);
end;
CreateCompatibleBitmap怎么使用?
Bmp.Canvas.Handle := DC;只是关联以下画布。无法存成Bmp
var
dc: hdc;
bmp: TBitmap;
begin
bmp:= tbitmap.Create;
bmp.Width := screen.Width;
bmp.Height := screen.Height;
dc:= getdc(0);
bitblt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,dc,0,0,srccopy);
bmp.SaveToFile('d:\aa.bmp');
releasedc(handle,dc);
bmp.Free;
end;
和
bitblt(form1.Canvas.Handle,0,0,bmp.Width,bmp.Height,dc,0,0,srccopy);
的执行速度相差太多。前者在150毫秒左右,而后者在15毫秒左右甚至更快。
var
StartTick: integer;
HOld: HGDIOBJ;
begin
startTick:= GetTickCount;
BitBlt(MemDC, 0, 0, 1024, 768, Dc, 0, 0 ,SrcCopy);
ShowMessage(IntToStr(GetTickCount - StartTick));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
DC:= GetDC(0);
HBmp:= CreateCompatibleBitmap(DC, 1024, 768);
MemDc:= CreateCompatibleDC(DC);
SelectObject(MemDC, HBmp);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteObject(MemDc);
DeleteObject(HBmp);
releaseDC(0, DC);
end;
在我这里显示的125 屏幕1024*768 * 32。
使用Mirror Draw也是差不多的结果
我的机器是P43.0、128显卡、1G内存。
能把您的代码贴出来么?
您的代码是DDB->DIB么?
我在另一个机器上测试也快的很。
请问大虾熟悉Mirror Draw么?