View Full Version : سوال: کنترل openpicturDialog برای محدود کردن اندازه عکس
hasandrw
جمعه 25 شهریور 1390, 11:37 صبح
سلام
جستجو کردم ولی اون چیزی که خودم می خواستم دستگیرم نشد.
من می خوام فایلی که با openpicturDialog بازش می کنم اول چکش کنه اگه اندازه اون عکس (4*3) بود تو کنترل Image برام نمایش بده.
فقط می خوام بدنم چجوری اندازه تصویر را براش محدود کنم.
سعید صابری
جمعه 25 شهریور 1390, 12:16 عصر
فکر نکنم openpicturedialog چنین امکانی داشته باشه ولی با کد زیر میتونی سایز عکس به پیکسل بدست بیاری
function ReadMWord(f: TFileStream): Word;
type
TMotorolaWord = record
case Byte of
0: (Value: Word);
1: (Byte1, Byte2: Byte);
end;
var
MW: TMotorolaWord;
begin
{ It would probably be better to just read these two bytes in normally }
{ and then do a small ASM routine to swap them. But we aren't talking }
{ about reading entire files, so I doubt the performance gain would be }
{ worth the trouble. }
f.read(MW.Byte2, SizeOf(Byte));
f.read(MW.Byte1, SizeOf(Byte));
Result := MW.Value;
end;
procedure GetJPGSize(const sFile: string; var wWidth, wHeight: Word);
const
ValidSig: array[0..1] of Byte = ($FF, $D8);
Parameterless = [$01, $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7];
var
Sig: array[0..1] of byte;
f: TFileStream;
x: integer;
Seg: byte;
Dummy: array[0..15] of byte;
Len: word;
ReadLen: LongInt;
begin
FillChar(Sig, SizeOf(Sig), #0);
f := TFileStream.Create(sFile, fmOpenRead);
try
ReadLen := f.read(Sig[0], SizeOf(Sig));
for x := Low(Sig) to High(Sig) do
if Sig[x] <> ValidSig[x] then ReadLen := 0;
if ReadLen > 0 then
begin
ReadLen := f.read(Seg, 1);
while (Seg = $FF) and (ReadLen > 0) do
begin
ReadLen := f.read(Seg, 1);
if Seg <> $FF then
begin
if (Seg = $C0) or (Seg = $C1) then
begin
ReadLen := f.read(Dummy[0], 3); { don't need these bytes }
wHeight := ReadMWord(f);
wWidth := ReadMWord(f);
end
else
begin
if not (Seg in Parameterless) then
begin
Len := ReadMWord(f);
f.Seek(Len - 2, 1);
f.read(Seg, 1);
end
else
Seg := $FF; { Fake it to keep looping. }
end;
end;
end;
end;
finally
f.Free;
end;
end;
یوسف زالی
جمعه 25 شهریور 1390, 13:12 عصر
روش ساده تری هم هست. عکس رو در image لود کن و heigth و width اون رو بگیر.
hasandrw
پنج شنبه 31 شهریور 1390, 11:07 صبح
آیا Height و Width کنترل image برحسب Cm محاسبه میشه یا معیار دیگه ای داره؟
Felony
پنج شنبه 31 شهریور 1390, 11:45 صبح
آیا Height و Width کنترل image برحسب Cm محاسبه میشه یا معیار دیگه ای داره؟
سانتی متر ؟!
خیر بر حسب پیکسل هست ؛ در ضمن نباید Height و Width خود کنترل Image رو بگیرید بلکه باید Height و Width مربوط به متد Picture اون رو بگیرید که حاوی عکس بارگذاری شده هست ، قبلش هم بررسی کنید ببینید اصلا عکسی تو کنترل Image بار شده یا خیر :
if Assigned(Image1.Picture) then
ShowMessageFmt('%d * %d', [Image1.Picture.Height, Image1.Picture.Width]);
hasandrw
پنج شنبه 31 شهریور 1390, 12:53 عصر
برای اینکه cm را به پیکل تبدیل کنم آیا معیار خاصی است . چون می خوام عکس 4*3 را در کنترل image لود کنم.
Felony
پنج شنبه 31 شهریور 1390, 15:27 عصر
1 سانتیمتر تقریبا معادل 38 پیکسل هست .
یوسف زالی
پنج شنبه 31 شهریور 1390, 18:25 عصر
جناب تاجیک اگر عکس مورد نظر DPI متفاوتی داشته باشه حرف شما در موردش مصداق نداره.
Felony
پنج شنبه 31 شهریور 1390, 18:49 عصر
جناب تاجیک اگر عکس مورد نظر DPI متفاوتی داشته باشه حرف شما در موردش مصداق نداره.
بله ، حتی اگر DPI متفاوت نداشته باشه هم نمیشه همچین شرطی رو اعمال کرد چون گفتم تقریبا 38 پیکسل هست و این عدد دقیق نیست و مثلا نمیشه تو شرط گفت اگر طول = 114 پیکسل ( 3 سانتی متر ) بود ... و باید یه رنج خاص رو در نظر گرفت ، مثلا اگر بین 100 تا 150 بود ...
راه حل دیگه این هست که DPI تصویر رو قبل از بررسی به یک عدد ثابت تغییر بدید ( مثلا 300 ) و بعد طول و عرض رو بررسی کنید .
Mask
پنج شنبه 31 شهریور 1390, 19:02 عصر
سایز عکس رو با این برنامه بدست بیار
Fastdesign
پنج شنبه 31 شهریور 1390, 19:17 عصر
اگه میشه در مورد DPI تصویر واضع تر توضیح بدید تا متوجه بشیم منظورتان چیه.
vcldeveloper
جمعه 01 مهر 1390, 11:47 صبح
اگه میشه در مورد DPI تصویر واضع تر توضیح بدید تا متوجه بشیم منظورتان چیه.
تعداد پیکسل در یک اینچ؛ یعنی چه مقدار پیکسل در فضایی به اندازه یک اینچ جا میشه؟ ابزارهای مختلف مثل مانیتور و پرینتر و اسکنر هر کدام DPI مشخصی دارند. تصاویر و داده های گرافیکی هم می تونند DPI مخصوص به خودشان را داشته باشند، که مشخص میکنه در اون تصویر تراکم پیکسل ها چقدر هست. اندازه پیکسل ها با توجه به میزان DPI تفاوت میکنه. اگر یک تصویر DPI ایی برابر با 300 داشته باشه، تراکم پیکسل هایش نسبت به تصویری با DPI = 600 دو برابر کمتر هست، در نتیجه پیکسل هایش بزرگتر هستند. هر قدر که DPI یک تصویر بالاتر باشه، دقت اون تصویر و جزئیات قابل مشاهده در آن بیشتر هست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.