نقل قول: گرفتن سایز یک تصویر Jpg
فكر كنم اين تابع كار شما رو انجام بده
function FileSized(fileName : wideString) : Int64;
var
sr : TSearchRec;
begin
if FindFirst(fileName, faAnyFile, sr ) = 0 then
result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow)
else
result := -1;
FindClose(sr);
end;
نقل قول: گرفتن سایز یک تصویر Jpg
دوست عزیز از پاسخت ممنونم.
من یه متغیر TImage دارم که تصویر jpg داخل اون هست،من میخوام حجم این TImage رو بدونم(اصلا این تصویر روی هارد ذخیره نشده است،اگر توی هارد ذخیره شده بود کلی روش برای بدست آوردن حجم بود.)
این تصویر از وبکم گرفته میشه و میخواهم به یک کامپیوتر دیگر ارسال کنم(با UDP) اما چون محدودیت حجم دارم،باید این تصویر رو به تکه های X بایتی تقسیم کنم.پس نیاز به حجم تصویر گرفته شده توسط وبکم دارم.(اما نمیشه که اول روی سیستم ذخیره کنم که حجمش رو بگیرم و بعد ارسال کنم!! زمان هدر میره)
لطفا راهنمایی کنید.
نقل قول: گرفتن سایز یک تصویر Jpg
تو رو به خدا کمکم کنید،بد جوری گیرم.:گریه::گریه::عصبانی++::عص بانی++::عصبانی:
نقل قول: گرفتن سایز یک تصویر Jpg
از كامپونت Image EN استفاده كنيد
نقل قول: گرفتن سایز یک تصویر Jpg
دوست عزیز من هم این به ذهنم رسید که از imageen استفاده کنم.
ولی:
1-پولیه
2-من خیلی مشتری دارم نمیتونم از demo استفاده کنم.
3-imageen هم دمو نداره.
نقل قول: گرفتن سایز یک تصویر Jpg
اون تصویر قبل اینکه عکس باشه یه بافر هست ، بسته به کامپوننتی که برای ارتباط با وب کم استفاده کردی یا API خود ویندوز ، حتما کامپوننت مربوطه متدهایی ارائه میده که تصویر رو به صورت Stream ذخیره کنی ؛ حجم استریم میشه حجم تصویرت :)
نقل قول: گرفتن سایز یک تصویر Jpg
نقل قول:
نوشته شده توسط
ابوالفضل عباسی
باسلام.
چطور میتونم سایز(حجم)یک تصویر Jpg رو برحسب بایت بدست بیاورم؟
من نمی خوام از MemoryStream و FileStream استفاده کنم چون زمان برام خیلی مهمه.(دو روش ذکر شده خیلی کند میباشد.)
باتشکر.
راستی دوستان کسی نمی تونه جواب سوال قبلیم "
ادغام کردن دو فیلم ویا تصویر" رو بده؟(یه راهنماییی !!)
سلام. در مورد روش سیو کردن رو مموری بیشتر کند بودن بخاطر گرفتن فضا و حافظه هست. اگر بتونید رو فایلی که قبلا بوده سیو کنید یا مموری رو یک بار بگیرید و هر بار رو همون ذخیره کنید فکر میکنم سرعتش بیشتر بشه. چه روی رم چه روی هارد.
و اینکه بدون استفاده از ذخیره کردن بخاید سایزشو بگیرید فکر نمیکنم امکان داشته باشه...چون اطلاعات به شکل خام ذخیره نمیشن...پردازش میشن و حجم بعد از کار مشخص میشه. یعنی در واقع یک تصویر jpg وقتی با کلاس TJPEGImage لود میشه یا ساخته میشه اطلاعات به این شکل که روی هارد هستن داخل ساختارهای کلاس ذخیره نمیشن. چون باید بتونه روشون کار کنه و تغییر بده. و موقع ذخیره کردن به شکل فرمت فایل JPG در میاد. پس تا فایلو نساخته فکر نمیکنم بتونید حجمشو بگیرید.
نقل قول: گرفتن سایز یک تصویر Jpg
function getnow():Double;
var
lic, lif: Int64;
begin
QueryPerformanceCounter(lic);
QueryPerformanceFrequency(lif);
Result := lic / lif;
end;
//---------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
p: TJPEGImage;
ms: TMemoryStream;
t0, t1, t2: Double;
begin
p := TJPEGImage.Create();
p.LoadFromFile('D:\Avatar_8V1A9872_Edited.jpg');
p.CompressionQuality := 5;
Self.Canvas.Draw(0, 0, p);
p.Compress();
ms := TMemoryStream.Create();
//*************************************
//تو این قسمت میتونید حافظه رو رزرو کنید بیشتر از مقداری که لازم دارید برای اطمینان من 10 مگابایت گذاشتم.
//ms->SetSize(10 * 1024 * 1024);
//ms->Position = 0;
//*************************************
t0 := getnow();
p.SaveToStream(ms);
t1 := getnow();
ms.Position := 0;
p.SaveToStream(ms);
t2 := getnow();
ShowMessage(FloatToStr(t1 - t0) + ' sanie hamrah ba gereftane hafeze jadid'#13#10 +
FloatToStr(t2 - t1) + ' sanie bedone gereftane hafeze jadid'#13#10 +
FloatToStr((t1 - t0) / (t2 - t1)) + ' nesbate zamanha :)');
ms.Position := 0;
p.LoadFromStream(ms);
Self.Canvas.Draw(0, 500, p);
end;
این یک نمونه هست که دوبار سیو میکنه. بار اول حافظه ی جدید میگیره و بار دوم از همون حافظه استفاده میکنه برای ذخیره و در آخر زمان هر دو رو مقایسه میکنه. من یک تصویر 4 مگی رو امتحان کردم نتیجه از نظر زمانی 4 برابر شد!
نقل قول: گرفتن سایز یک تصویر Jpg
چون تصویری که از وبکم میگیرم توی حافظه است،این روش جواب نمیدهد.
ولی بابت پاسخت دوست عزیزم ممنون.