如何使用 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;
}