PDA

View Full Version : ذخیره تصویر فرم بصورت یه فایل jpg



Procedure
چهارشنبه 21 آذر 1386, 08:28 صبح
سلام
میخوام تصویر فرم فعال رو بصورت یه فایل jpg ذخیره کنم.
ممنون میشم راهنماییم کنین

Hamid_PaK
چهارشنبه 21 آذر 1386, 16:07 عصر
در این باره بحث شده لینک گفتگو (http://barnamenevis.org/forum/showthread.php?t=52509).
به جمع برنامه نویسان برنامه نویس خوش آمدید، لطفا قوانین را رعایت کنید و قبل از ارسال گفتگو موضوع را جستجو کنید.

یا حق ...

unforgiven.
چهارشنبه 21 آذر 1386, 20:46 عصر
با اینکه بیشتر ترجیح میدم بخونم ولی :چشمک:

*نکته : برای اینکار دلفی یه دستور مخصوص داره به نام GetFormImage که از اسمش مشخصه چیکار میکنه !

چند خط نمونه برای استفاده از این کد در دو حالت می نویسم که درکش راحت تر باشه . فرض بر اینه که یه فرم با اجزای خودش داریم . دو تا دکمه (Button)روی فرم می ذاریم به نام های Button1 و Button 2 که برای راحتی بهشون میگم دکمه یک و دکمه دو :
1 . توی این قسمت یه عکس از خود فرم میگیریم و داخل clipboard ذخیره میکنیم تا هر جا که خواستیم Past کنیم . برای اینکار دستورات زیر رو در رویداد کلیک دکمه می نویسیم :



procedure TForm1.Button1Click(Sender: TObject);
var
imgWindow: TBitmap;
begin
imgWindow := GetFormImage;
try
Clipboard.Assign(imgWindow);
finally
imgWindow.Free;
end;
end;
2 . حالا می خوایم از فرم عکس بگیریم و داخل یه فایل ذخیره کنیم . برای اینکار دستورات زیر رو در رویداد کلیک دکمه دوم می نویسیم :



procedure TForm1.Button2Click(Sender: TObject);
var
imgWindow: TBitmap;
begin
imgWindow := TBitmap.Create;
try
imgWindow := Form1.GetFormImage;
imgWindow.SaveToFile('c:\FormImage.bmp');
finally
imgWindow.Free;
end;
end;

vcldeveloper
چهارشنبه 21 آذر 1386, 22:17 عصر
. حالا می خوایم از فرم عکس بگیریم و داخل یه فایل ذخیره کنیم . برای اینکار دستورات زیر رو در رویداد کلیک دکمه دوم می نویسیم :
کد شما Memory Leak میده، چون یک بار یک نمونه از TBitmap را Create کردید (ImgWindow)، سپس Form1.GetFormImage را به ImgWindow نسبت دادید. GetFormImage خودش یک نمونه جدید از TBitmap ایجاد می کند و به ImgWindow نسبت می دهد. نتیجه آن می شود که مقدار قبلی ImgWindow تبدیل به Garbage می شود. کد را می توانید به صورت زیر اصلاح کنید:


var
ImgWindow : TBitmap;
begin
ImgWindow := Form1.GetFormImage;
if Assigned(ImgWindow) then
begin
try
ImgWindow.SaveToFile('C:\FormImage.bmp');
finally
ImgWindow.Free;
end;
end;
end;


اما کاربر سوال کننده درباره نحوه ذخیره کردن آن تصویر با فرمت JPEG سوال پرسیده بود. جوابش میشه:


uses
JPEG;
procedure SaveFormImage(Form: TForm; const ImageFile: TFileName);
var
JImage : TJPEGImage;
BImage : TBitmap;
begin
BImage := Form.GetFormImage;
if Assigned(BImage) then
begin
JIMage := TJPEGImage.Create;
try
JIMage.Assign(BIMage);
JImage.SaveToFile(ImageFile);
finally
BImage.Free;
JImage.Free;
end;
end;
end;
نحوه استفاده:

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveFormImage(Form1,'G:\Test.jpg');
end;

Delphi Coder
جمعه 23 آذر 1386, 18:46 عصر
این Unit که استفاده کردید سورس هم داره؟
من تو delphi 7 پیداش نکردم فایل کمپایل شده بود.

vcldeveloper
جمعه 23 آذر 1386, 21:44 عصر
این Unit که استفاده کردید سورس هم داره؟
منظورتون JPEG هست؟ نه، این یونیت به صورت DCU با دلفی عرضه میشه. شاید مشکلات قانونی در انتشار سورسش داشتند.