Delphi实现截屏存盘的方法
作者:SunnyJourney
时间:2026-06-29
浏览:0
在Delphi中,通过GetDC获取屏幕设备上下文,创建兼容DC及位图,利用BitBlt复制指定区域,然后赋给TJPEGImage并设置压缩质量70,保存为JPEG文件,需注意释放GDI对象以避免内存泄漏。
在Delphi开发中,截屏并保存为JPEG是一个常见的需求。这里直接给出一个实用的实现方案,核心思路是通过Windows GDI函数获取屏幕设备上下文,然后利用位图对象和JPEG压缩完成存储。

具体来看这段代码:自定义一个ScreenCap过程,接收四个整数参数分别表示截取区域的左、上、右、下坐标。内部先计算宽高,然后创建屏幕DC和兼容DC,生成兼容位图,通过BitBlt将屏幕内容复制到位图中。之后将位图赋值给TJpegImage对象,设置压缩质量为70(可根据需要调整),最后保存到指定路径。整个过程用try...finally确保资源释放,避免内存泄漏。
procedure TForm1.ScreenCap(LeftPos,TopPos,RightPos,BottomPos:integer);
var
RectWidth,RectHeight:integer;
SourceDC,DestDC,Bhandle:integer;
Bitmap:TBitmap;
MyJpeg: TJpegImage;
Stream:TMemoryStream;
begin
MyJpeg:= TJpegImage.Create;
RectWidth:=RightPos-LeftPos;
RectHeight:=BottomPos-TopPos;
SourceDC:=CreateDC('DISPLAY','','',nil);
DestDC:=CreateCompatibleDC(SourceDC);
Bhandle:=CreateCompatibleBitmap(SourceDC,
RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,
LeftPos,TopPos,SRCCOPY);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=BHandle;
Stream := TMemoryStream.Create;
Bitmap.Sa veToStream(Stream);
Stream.Free;
try
MyJpeg.Assign(Bitmap);
MyJpeg.CompressionQuality:=70;
MyJpeg.Compress;
MyJpeg.Sa veToFile('C:MyJPEGImage.JPG');
finally
MyJpeg.Free;
Bitmap.Free;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);
end;
end;
需要注意几个细节:CreateDC('DISPLAY',...)用于获取整个屏幕的DC;ReleaseDC的参数顺序容易写反,这里第一个参数是位图句柄,第二个是源DC;另外实际使用中建议将文件路径改为动态传入或通过对话框选择。这段代码可以直接嵌入到按钮点击事件或其他触发逻辑中,方便快捷。
作者最新文章
图几
2026-09-16 17:43
SQL中ROUND函数对0.5的处理机制及强制四舍五入方法
2026-09-15 14:19
JS金额计算怎么避免四舍五入误差
2026-09-14 17:32
韩国8月携号转网数据:Galaxy Z8系列iPhone用户转化率约为Z7系列2倍
2026-09-08 17:02
AE基础教程:如何创建合成并制作关键帧动画
2026-09-04 09:27
上一篇:
Delphi7中群发Email邮件的方法
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































