PDA

View Full Version : حرفه ای: تبدیل فرمت و تغییر سایز و ذخیره فایل با Timage



sajioo
یک شنبه 25 آبان 1393, 10:56 صبح
دوستان سلام
در خصوص کار با عکس ها چندتا سوال داشتم
فرض این است که من در یک timage یک عکس jpg یا bmp یا png لود کردم
سوال اول
چطور می توان فرمت عکس را مشخص کرد؟

سوال دوم
اگر فرمت عکس png نبود چطور می توان آن دو فرمت را در به png تبدیل کرد و در فایلی ذخیره کرد به عنوان یک عکس png

سوال سوم
اگر بخواهم سایز فایل مربوطه برای مثال 25 در 25 پیکسل باشد آیا راهی هست که برنامه آن را ریسایز کرده و بعد ذخیره کند؟

با تشکر

دلفــي
یک شنبه 25 آبان 1393, 13:33 عصر
جواب سوال 1:
با استفاده از تابع ExtractFileExt

جواب سوال 2:


Convert Pictures Format To Png
-----------------------------------------
Uses
Classes, ExtCtrls, PngImage,Graphics, axCtrls;
-----------------------------------------
procedure TForm1.ChangePicFormat(InputPicName,SavePngFileNam e:String);
Var
OleGraphic : TOleGraphic;
fs : TFileStream;
Source : TImage;
BMP : TBitmap;
Begin
Try
OleGraphic := TOleGraphic.Create; {The magic class!}


fs := TFileStream.Create(InputPicName, fmOpenRead Or fmSharedenyNone);
OleGraphic.LoadFromStream(fs);


Source := Timage.Create(Nil);
Source.Picture.Assign(OleGraphic);


BMP := TBitmap.Create; {Converting to Bitmap}
bmp.Width := Source.Picture.Width;
bmp.Height := source.Picture.Height;
bmp.Canvas.Draw(0, 0, source.Picture.Graphic);


BitmapFileToPNG(bmp,SavePngFileName);
Finally
fs.Free;
OleGraphic.Free;
Source.Free;
bmp.Free;
End;
End;

procedure BitmapFileToPNG(const Source, Dest: String);
var
Bitmap: TBitmap;
PNG: TPNGObject;
begin
Bitmap := TBitmap.Create;
PNG := TPNGObject.Create;
{In case something goes wrong, free booth Bitmap and PNG}
try
Bitmap.LoadFromFile(Source);
PNG.Assign(Bitmap); //Convert data into png
PNG.SaveToFile(Dest);
finally
Bitmap.Free;
PNG.Free;
end
end;



جواب سوال 3:


procedure ResizeBitmap(Bitmap: TBitmap; const NewWidth, NewHeight: integer);
begin
Bitmap.Canvas.StretchDraw(Rect(0, 0, NewWidth, NewHeight),Bitmap);
Bitmap.SetSize(NewWidth, NewHeight);
end;

یوسف زالی
یک شنبه 25 آبان 1393, 14:40 عصر
سلام.
برای این که ببینید فرمت تصویرتون چیه، راه درستش نگاه کردن به امضای اون فرمت هست. مثلا در فایل های بیت مپ BM همیشه اولین بایت های فایل هست.
در این سایت می تونید اطلاعات خوبی بدست بیارید:
http://wotsit.org/

sajioo
یک شنبه 25 آبان 1393, 15:47 عصر
دوستان این خط مشکل داشت


BitmapFileToPNG(bmp,SavePngFileName);

ارورشم اینه که دو نوع string و bmp نسازگارند:افسرده:

sajioo
یک شنبه 25 آبان 1393, 17:41 عصر
Bitmap.SetSize(NewWidth, NewHeight);
دوستان این تابع در اصل داره برش میده . یعنی اگه من 25 در 25 وارد کنم ، یک مربع 25 از عکس برش میده. من میخوام عکس و ریسایز کنه.لطفا راهنمایی:تشویق:
ریسایز یک فایل png

*جیگرم*
دوشنبه 26 آبان 1393, 02:00 صبح
uses cxGraphics, dxGDIPlusClasses;
...
var
png: TdxPNGImage;
srcBmp,
destBmp: TcxAlphaBitmap;
begin
png:= TdxPNGImage.Create;
png.LoadFromFile(PicDlg.FileName);
srcBmp.Width:= png.Width;
srcBmp.Height:= png.Height;
srcBmp.Canvas.Draw(0,0,png);

if srcBmp.Width>srcBmp.Height then begin
nh := (srcBmp.Height* 100) div srcBmp.Width ;
nw := 100;
end else begin
nw := (srcBmp.Width* 100) div srcBmp.Height;
nh := 100;
end;
destBmp := TcxAlphaBitmap.CreateSize(nw, nh);
cxSmoothResizeBitmap(srcBmp, destBmp, true);
png.setbitmap(destbmp);
destbmp.free;
srcbmp.free;
...
png.free;
end;