如何截取屏幕上某区域的静止图像,并存为图像文件?(100分)

  • 主题发起人 主题发起人 wz_hzb
  • 开始时间 开始时间
W

wz_hzb

Unregistered / Unconfirmed
GUEST, unregistred user!
如何截取屏幕上某区域的静止图像,并存为图像文件?
 
程序实现?
 
procedure TForm1.FormClick(Sender: TObject);
var winHWND :integer;
winDC:integer;
rect:TRect;
fBitmap:TBitmap;
begin
winHWND := GetDesktopWindow();
winDC := GetDC(winHWND);
GetWindowRect(winHWND, rect);
fBitmap := TBitmap.create;
fBitmap.width := rect.right-rect.left;
fBitmap.height := rect.bottom-rect.top;
BitBlt(fBitmap.canvas.handle, 0, 0, fBitmap.width, fBitmap.height, winDC, 0, 0, SRCCOPY);
fBitmap.SaveToFile('c:/tyn.bmp');
fBitmap.Free;
end;
 
老卷,你速度太快了。
還可以用Copyrect實現。
 
用Copyrect如何做呀?
 
to 卷起千堆雪tyn:
保存下来的图片是32位的,能不能存为16色或者256色呀。请指教!
 
BitBlt(fBitmap.canvas.handle, 0, 0, fBitmap.width, fBitmap.height, winDC, 0, 0, SRCCOPY);
fBitmap.PixelFormat :=pf8bit; //这是保存为256色,想保存为16色,设定fBitmap.PixelFormat :=pf4bit;
fBitmap.SaveToFile('c:/tyn.bmp');
fBitmap.Free;
 
to 卷起千堆雪tyn:
不好意思,向你再次请教,图片存为.bmp文件太大了点,能否存为.jpg格式呀。
 
下面是BMP---JPG的转化,自己根据程序改改了。

uses Jpeg;

var
bmp :TBitmap;
jpg :TJpegImage;
begin
bmp :=TBitmap.Create;
bmp.LoadFromFile('......');
jpg :=TJpegImage.Create;
jpg.Assign(bmp);
jpg.SaveToFile('...........');
bmp.Free;
jpg.Free;
end;
 
随便问一句:怎么直接调用.gif文件?不用控件
怎么转换为.gif文件?
卷卷兄望见告阿!
有谁知道吗?
 
调用、转换为gif文件,还是用GifImage吧,。。。。。。
GifImage不是控件,是单元文件。。。
 
接受答案了.
 
to 卷起千堆雪tyn:

var winHWND :integer;
winDC:integer;
rect:TRect;
fBitmap:TBitmap;
begin
winHWND := GetDesktopWindow();
winDC := GetDC(winHWND);
GetWindowRect(winHWND, rect);
fBitmap := TBitmap.create;
fBitmap.width := rect.right-rect.left;
fBitmap.height := rect.bottom-rect.top;
BitBlt(fBitmap.canvas.handle, 0, 0, fBitmap.width, fBitmap.height, winDC, 0, 0, SRCCOPY);
fBitmap.SaveToFile('c:/tyn.bmp');
fBitmap.Free;

以上代码如果界面上有mediaplay控件,并且有播放,或暂停,save出的图片中mediaplay所播放区域为一片黑,如果在点save之前,先点一下其它窗口(即不是此form,其它之外的窗口),点save就正常看到图片,为什么?
 

Similar threads

后退
顶部