我知道关于我的问题有很多答案,但我从来不明白我所做的事情。
我只需在任何操作系统中截取部分表格的屏幕截图,例如:
从位置X = 30截取屏幕截图,直到X = 80和Y = 30,直到Y = 200所以,在这种情况下,图像应该有50x170px,但我想要一个适用于任何分辨率的解决方案。
图像的格式可以是JPEG,GIF,PNG或BMP(位图)。 就是这样......
目前我正在使用FMX库,但如果你有一个可以与VCL一起使用的代码,我可以尝试根据我的需要进行更改。 如果还有这样的问题,请不要将我的问题视为一个错误的问题",我还是一个想要多学习的新手。
PS:我试图使用任何设备/操作系统,所以我想避免使用API。
非常感谢!
答案 0 :(得分:3)
FireMonkey的TForm
类有一个PaintTo()
方法。创建两个TBitmap
个对象,将第一个位图' s Canvas
传递给PaintTo()
,然后在第二个位图上调用CopyFromBitmap()
指定所需的坐标,然后就可以使用第二个位图根据需要。例如:
void __fastcall TMyForm::GrabScreenshot()
{
TRect r(30, 30, 80, 200);
TBitmap *bmp1 = new TBitmap;
bmp1->SetSize(ClientWidth, ClientHeight);
PaintTo(bmp1->Canvas);
TBitmap *bmp2 = new TBitmap;
bmp2->SetSize(r.Width, r.Height);
bmp2->CopyFromBitmap(bmp1, r, 0, 0);
delete bmp1;
// use bmp2 as needed...
delete bmp2;
}