如何使用C ++ Builder截取屏幕截图?

时间:2015-02-07 18:12:21

标签: c++ screenshot c++builder firemonkey vcl

我知道关于我的问题有很多答案,但我从来不明白我所做的事情。

我只需在任何操作系统中截取部分表格的屏幕截图,例如:

从位置X = 30截取屏幕截图,直到X = 80和Y = 30,直到Y = 200所以,在这种情况下,图像应该有50x170px,但我想要一个适用于任何分辨率的解决方案。

图像的格式可以是JPEG,GIF,PNG或BMP(位图)。 就是这样......

目前我正在使用FMX库,但如果你有一个可以与VCL一起使用的代码,我可以尝试根据我的需要进行更改。 如果还有这样的问题,请不要将我的问题视为一个错误的问题",我还是一个想要多学习的新手。

PS:我试图使用任何设备/操作系统,所以我想避免使用API​​。

非常感谢!

1 个答案:

答案 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;
}