#include <jpeg.hpp>
void __fastcall TForm1::Button11Click(TObject *Sender)
{
Graphics::TBitmap *FormImage = GetFormImage();
TJPEGImage *jp = new TJPEGImage();
try
{
FormImage->Width = 120;
FormImage->Height = 120;
FormImage->Canvas->CopyRect(TRect(0,0,100,100),FormImage->Canvas, TRect(20,20,120,120));
FormImage->Width = 100;
FormImage->Height = 100;
jp->Assign(FormImage);
Form1->Tag++;
jp->SaveToFile("c:\\" + IntToStr(Form1->Tag) + ".jpg");
}
__finally
{
delete FormImage;
delete jp;
}
}
сделать скриншот области формы.
как сделать скришот области на форме и сохранить в файл с форматом гиф, но можно и в другую. область например 10-10, отступ слева и сверху равен 5. при сохранении картинки должны иметь разные имена. например первый скрин с названием 1, второй 2 и т.д.
заранее всем благоарен
В jpg. Отступ 20х20. Размер 100х100
Мerlinспасибо. но если заново запустить программу, то если имеется скриншот 1, то она его заменяет.
Код:
Graphics::TBitmap *FormImage = GetFormImage();
TJPEGImage *jp = new TJPEGImage();
try
{
FormImage->Width = 120;
FormImage->Height = 120;
FormImage->Canvas->CopyRect(TRect(0,0,100,100),FormImage->Canvas, TRect(20,20,120,120));
FormImage->Width = 100;
FormImage->Height = 100;
jp->Assign(FormImage);
int tag = Form1->Tag;
AnsiString fname = "c:\\" + IntToStr(tag) + ".jpg";
while(FileExists(fname))
{
tag++;
fname = "c:\\" + IntToStr(tag) + ".jpg";
}
Form1->Tag = tag++;
jp->SaveToFile(fname);
}
__finally
{
delete FormImage;
delete jp;
}
TJPEGImage *jp = new TJPEGImage();
try
{
FormImage->Width = 120;
FormImage->Height = 120;
FormImage->Canvas->CopyRect(TRect(0,0,100,100),FormImage->Canvas, TRect(20,20,120,120));
FormImage->Width = 100;
FormImage->Height = 100;
jp->Assign(FormImage);
int tag = Form1->Tag;
AnsiString fname = "c:\\" + IntToStr(tag) + ".jpg";
while(FileExists(fname))
{
tag++;
fname = "c:\\" + IntToStr(tag) + ".jpg";
}
Form1->Tag = tag++;
jp->SaveToFile(fname);
}
__finally
{
delete FormImage;
delete jp;
}
что то твой вариант не работает.
сделал так, и всё работает
Код:
int tag = 1;
AnsiString fname = "c:\\" + IntToStr(tag) + ".jpg";
while(FileExists(fname))
{
tag++;
fname = "c:\\" + IntToStr(tag) + ".jpg";
}
jp->SaveToFile("c:\\" + IntToStr(tag) + ".jpg");
AnsiString fname = "c:\\" + IntToStr(tag) + ".jpg";
while(FileExists(fname))
{
tag++;
fname = "c:\\" + IntToStr(tag) + ".jpg";
}
jp->SaveToFile("c:\\" + IntToStr(tag) + ".jpg");
вопрос решен.
что то твой вариант не работает.
сделал так, и всё работает.[/QUOTE]Если имеешь в виду, что сохранение начинается с 0.jpg, то я
предполагал, что ты додумаешься или установить вручную в
Object Inspectore Tag == 1, или в OnCreate событии формы
напишешь Tag = 1;
В твоем решении есть один минус. Допустим есть уже 200
screenshots, тогда перед записью 201-го перебираются имена 200
файлов, при записи 202-го, перебираются имена 202 файлов,
итд. Т.е. tag нужно бы сделать переменной формы и инициализировать
один раз.
Кроме этого, imho лучше было бы сохранять в виде 00001.jpg, 00002.jpg,
и так дальше. Так как в данном случае, если есть напр. 20 файлов, то
они в альфавитном порядке будут идти 1.jpg, 10.jpg...19.jpg, 2.jpg.