如何使用 C++ Builder 截取屏幕截图?
How to take a screenshot with C++ Builder?
我知道我的问题有很多答案,但我一直不明白我在做什么。
我只需要在任何OS中截图我的部分表格,例如:
从 X=30 到 X=80 和 Y=30 到 Y=200 的位置截图所以,在这种情况下,图像应该有 50x170px,但我想要一个适用于任何分辨率的解决方案。
图像格式可以是JPEG、GIF、PNG或BMP(位图)。
难道只是...
目前我正在使用 FMX 库,但如果您有适用于 VCL 的代码,我可以根据需要尝试更改它。
如果还有这样的问题,请不要把我当成"bad question",我还是个菜鸟,想多学一点
PS.: 我正在尝试使用任何 device/OS,所以我想避免使用 API。
非常感谢!
FireMonkey的TForm
class在第二个位图上有一个PaintTo()
method. Create two TBitmap
objects, pass the first bitmap's Canvas
to PaintTo()
, then call 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;
}
我知道我的问题有很多答案,但我一直不明白我在做什么。
我只需要在任何OS中截图我的部分表格,例如:
从 X=30 到 X=80 和 Y=30 到 Y=200 的位置截图所以,在这种情况下,图像应该有 50x170px,但我想要一个适用于任何分辨率的解决方案。
图像格式可以是JPEG、GIF、PNG或BMP(位图)。 难道只是...
目前我正在使用 FMX 库,但如果您有适用于 VCL 的代码,我可以根据需要尝试更改它。 如果还有这样的问题,请不要把我当成"bad question",我还是个菜鸟,想多学一点
PS.: 我正在尝试使用任何 device/OS,所以我想避免使用 API。
非常感谢!
FireMonkey的TForm
class在第二个位图上有一个PaintTo()
method. Create two TBitmap
objects, pass the first bitmap's Canvas
to PaintTo()
, then call 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;
}