Я знаю, что есть много ответов на мой вопрос, но я никогда не понимаю, что я делаю.
Мне просто нужно сделать снимок экрана части моей Формы в любой ОС, например:
Сделайте снимок экрана с позиции X = 30 до X = 80 и Y = 30 до Y = 200 Итак, в этом случае изображение должно иметь размер 50×170 пикселей, но я хочу решение, которое работает с любым разрешением.
Формат изображения может быть JPEG, GIF, PNG или BMP (Bitmap).
Это просто …
В настоящее время я использую библиотеку FMX, но если у вас есть код, который работает с VCL, я могу попробовать изменить его в соответствии с моими потребностями.
Если есть другой вопрос, как этот, пожалуйста, не воспринимайте мой как «плохой вопрос», я все еще новичок, желающий узнать немного больше.
PS: я пытаюсь сделать это с любым устройством / ОС, поэтому я хочу избегать использования API.
Большое спасибо!
FireMonkey-х TForm
класс имеет PaintTo()
метод. Создать два TBitmap
объекты, передайте первое растровое изображение 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;
}