PDA

View Full Version : سوال: نیاز به برنامه برای تغییر اندازه تصویر؟



mbshareat
چهارشنبه 17 شهریور 1389, 22:33 عصر
با سلام خدمت دوستان
من تصاویری دارم که می خوام تو برنامم اونها رو کوچیک کنم.
یه Procedure می خوام که تصویرام رو که تصویر فایل PDF هستش بدون افت کیفیت کوچکتر کنه.
من از
SetStretchBltMode(HB.Canvas.Handle,HALFTONE);
استفاده کردم ولی تصویر رو رنگ پریده نشون می ده .
تو اینترنت هم خیلی دنبال روشهای Resampling تصویر گشتم.
ولی دمو و کامپوننت و برنامه ویژوال بیسیک گیر آوردم که هیچیک به دردم نخورد.(من قبلا VB کار می کردم ولی نتونستم برنامه رو به دلفی ترجمه کنم و کمتر کامپوننتی تو دلفی من(دلفی 6) نصب می شه)
اگه کسی برنامه ساده، سریع و بی درد سر داره لطف کنه بذاره.در ضمن من عجله دارم تا یکی دو روز دیگه برناممو تموم کنم.
راستش تو برنامه VB که دانلود کردم الگوریتم Bicubic Cardinal Spiline به درد کارم می خورد.
پیشاپیش از لطف دوستان نهایت تشکر رو دارم.

SAASTN
چهارشنبه 17 شهریور 1389, 23:02 عصر
تو این تاپیک قبلا یه صحبتایی شده بود:
http://barnamenevis.org/forum/showthread.php?t=233102&highlight=scrollbox

moein+
پنج شنبه 18 شهریور 1389, 02:56 صبح
توصیه من استفاده از Graphics32 هست که تمامی توابع متداول Resampling رو به صورت 32bit (با ساپورت کانال آلفا) داره البته مجموعه معظمی:لبخند: هست و حالا که شما عجله داری یونیتی که پیوست می کنم شامل توابع Resampling بر اساس فیلترهای زیر هست :



Spline
Bell
Triangle
Box
Hermite
Lanczos3
Mitchell

منبع : www.torry.net


اما Graphics32 به مراتب سریعتر است...(تصویر زیر نمونه Graphic32)

mbshareat
پنج شنبه 18 شهریور 1389, 10:41 صبح
از جناب SAASTN ممنونم ولی چیز خاصی که بدردم بخوره توی تاپیک ندیدم.:ناراحت:
همینطور هم از جناب moein+ (http://barnamenevis.org/forum/member.php?u=137612) تشکر می کنم.برنامه رو برداشتم.من همین یکی دو روز پیش Graphic32 رو دانلود کردم ولی نتونستم ازش استفاده کنم و بهد از کلی ور رفتن پاکش کردم.:عصبانی:
در ضمن من برای برنامم می خوام با این همه فایل که اصلا نمی دونم کدوم به دردم می خوره و چطور استفاده می شه چه کار کنم؟:افسرده:

(من فکر نمی کنم با کمبود اطلاعات برنامه نویسها در زمینه گرافیک اگه بخش پردازش تصویر هم اضافه شه مشکل چندانی حل کنه!!!:گیج:)
امام علی (ع) :
« با روی خوش کسی را رد کنی بهتر از این است که وعده طولانی دهی. »
غررالحکم . ح 8637 . ص 38. 6 .

mbshareat
پنج شنبه 18 شهریور 1389, 11:42 صبح
سلام علیکم.:قلب:
برنامه جناب moein+ (http://barnamenevis.org/forum/member.php?u=137612) رو برداشتم کار می کرد ولی با سرعت غیر قابل قبول مثلا 3 ثانیه برای تصویر . این در حالیه که من برای ورق زدن چیزی مثل کتاب به این پروسیجر نیاز دارم.:متعجب:
اگه ممکنه یه کد سر راست سریع برام بذارین(ترجیحا کامپوننت نباشه که معمولا نصب نمی شه:عصبانی:)که تصویر رو شارپ و پر رنگ نشون بده چون Halfton که روش API هستش رو دارم ولی رنگ واضحی برای تصویر متن با قلم نرم ارائه نمی ده.:بامزه:
در خواست می کنم زودتر لطف کنین چون عجله دارم.:متفکر:
«گر بر سر نفس خود امیری، مردی *** بر کور و کر ار نکته گیری ، مردی»
«مردی نبود فتاده را پای زدن *** گر دست فتاده ای بگیری، مردی»

(رودکی)

مصطفی ساتکی
پنج شنبه 18 شهریور 1389, 12:03 عصر
در ضمن من برای برنامم می خوام با این همه فایل که اصلا نمی دونم کدوم به دردم می خوره و چطور استفاده می شه چه کار کنم
دوست عزیز جوینده یابندست.شما بایستی ببینی کجا کارتون میلنگه .تو کدنویسی ضعف دارین تو مباحث کار با تصویر و گرافیک ضعف دارین.اینا چیزی نیست که با آمپول به کسی تزریق کنند خودش بایستی با توجه به منابع موجود اونا رو یاد بگیره.
این چیزی که شما نیاز دارید تو graphic32 و Image en و اکثر کتابخانه های گرافیکی و پردازش تصویر کداش وجود داره .
اگر مستند هم میخاید در مورد جزئیاتشون بدونید در wiki وجود داره .حالا نمیدونم مشکل کجاست که شما هی این بحث رو تکرار می کنید. اینجا راهنمایی می کنند نه برای دیگران کد زدن و طریقه راهنمایی نمودن دیگران به نحوه پرسش شما بستگی داره.

من فکر نمی کنم با کمبود اطلاعات برنامه نویسها در زمینه گرافیک اگه بخش پردازش تصویر هم اضافه شه مشکل چندانی حل کنه
اصلاً نیازی به فکر کردن شما نداره اگر شما از حل چنین مباحثی موندید چطور می تونید در مورد مباحث vision اظهار نظر کنید اون تالار هم اضافه بشی من نوعی تکلیف حل نمی کنم فقط سوال رو جواب میدم سوال نه چیز دیگه . من تو پردازش تصویر با vc++ و دلفی و matlab( تا حدودی ) کد می زنم دلیلی نمیشه کار شخصی یا پروژه دیگران رو بیایم اونجا انجام بدیم پس کی به کارهای خدمون برسیم
موفق باشید

SAASTN
پنج شنبه 18 شهریور 1389, 13:15 عصر
اگه ممکنه یه کد سر راست سریع برام بذارین(ترجیحا کامپوننت نباشه که معمولا نصب نمی شه)که تصویر رو شارپ و پر رنگ نشون بده چون Halfton که روش API هستش رو دارم ولی رنگ واضحی برای تصویر متن با قلم نرم ارائه نمی ده.

HalfTone که اصلا ربطی به مسئله شما نداره. اون کارش فقط همون رنگ پریده کردن تصویره. اگه برش داری مسئله رنگ حل میشه. مسئله شما StretchBlt هست که هموارسازی نمی کنه.
در مورد کامپوننت ها هم که درست برعکس، معمولا نصب میشن، حالا اگه نتونستی نصبش کنی باید ببینی مشکل از کجاست. همون Graphics32 رو من قبلا استفاده کردم، نصب شده و سرعتش هم قابل قبوله. تا جایی یادم میاد توSampleهاش نمونه های RealTime تغییر سایز هم داشت.

mbshareat
پنج شنبه 18 شهریور 1389, 16:15 عصر
با سلام ودرود
به نظرم می رسه روش نصب کامپوننت رو که قبلا هم تاپیک داشته می دونم.
کلا می گم تو دلفی من نصب نمی شه (به هر دلیل!)
منظورم از اینکه نمی دونم کدوم فایل به درد من می خوره هم اینه که من می خوام الگوریتم خالص رو تو برنامه داشته باشم(مخصوصا که از کامپوننت بلد نیستم استفاده کنم) و حتما با رجوع به امثال Graphic32 متوجه شدین که توابع و پروسیجرها چقدر تو در تو هستند. مثلا من برنامه دلفی دانلود کردم که کارمو انجام می ده ولی زیپ شدش 19 مگا بایته و برنامه ای که کار می کنه اصلا معلوم نیست چی رو اجرا می کنه چون چیزس مثل پروسیجر و تابع نداره فقط یه فرم تعریف می کنه و اجرا می کنه.(سرعت بالایی هم داره ولی که چی؟!)
بالاخره بعضی مبتدیها هم به سایت رجوع می کنن و سوال من هم سوالی نیست که بیش از یک دهم برنامه نویسها جوابشو بدونن یا تو اینترنت به راحتی بشه جواب گرفت!!!
در هر صورت از بنده نوازی دوستان تشکر می کنم. علت اینکه فکر نمی کنم بخش پردازش تصویر موفق باشه هم اینه که خیلی از سوالای گرافیکی قبلی من بی جواب موندن.(شعر بالا هم یادتون نره!؟)
در نهایت اگه بی ادبی به بزرگان کردم عذر می خوام ولی اگه باز هم لطف کنین جواب سر راست بدین نه اینکه فقط ایراد بگیرین خوشحال می شم.
(چو خواهی که نامت رود در جهان *** مکن نام نیک بزرگان نهان)

moein+
پنج شنبه 18 شهریور 1389, 17:36 عصر
با سلام ودرود
به نظرم می رسه روش نصب کامپوننت رو که قبلا هم تاپیک داشته می دونم.
کلا می گم تو دلفی من نصب نمی شه (به هر دلیل!)
منظورم از اینکه نمی دونم کدوم فایل به درد من می خوره هم اینه که من می خوام الگوریتم خالص رو تو برنامه داشته باشم(مخصوصا که از کامپوننت بلد نیستم استفاده کنم) و حتما با رجوع به امثال Graphic32 متوجه شدین که توابع و پروسیجرها چقدر تو در تو هستند. مثلا من برنامه دلفی دانلود کردم که کارمو انجام می ده ولی زیپ شدش 19 مگا بایته و برنامه ای که کار می کنه اصلا معلوم نیست چی رو اجرا می کنه چون چیزس مثل پروسیجر و تابع نداره فقط یه فرم تعریف می کنه و اجرا می کنه.(سرعت بالایی هم داره ولی که چی؟!)
بالاخره بعضی مبتدیها هم به سایت رجوع می کنن و سوال من هم سوالی نیست که بیش از یک دهم برنامه نویسها جوابشو بدونن یا تو اینترنت به راحتی بشه جواب گرفت!!!
در هر صورت از بنده نوازی دوستان تشکر می کنم. علت اینکه فکر نمی کنم بخش پردازش تصویر موفق باشه هم اینه که خیلی از سوالای گرافیکی قبلی من بی جواب موندن.(شعر بالا هم یادتون نره!؟)
در نهایت اگه بی ادبی به بزرگان کردم عذر می خوام ولی اگه باز هم لطف کنین جواب سر راست بدین نه اینکه فقط ایراد بگیرین خوشحال می شم.
(چو خواهی که نامت رود در جهان *** مکن نام نیک بزرگان نهان)

سلام،
دوست عزیز گویا خیلی عجله دارید! :لبخند: (اما گر صبر کنی ...)
نمونه تصحیح شده کد یونیت قبلی به لحاظ سرعت و... رو می تونید در این کتابخانه GraphicEx
در آدرس زیر بیابید
http://www.soft-gems.net/index.php?option=com_content&task=view&id=13&Itemid=33
پروسیجری به نام "Stretch".
اما در مورد گرافیک 32 اگر در جستجوی Google تایپ بفرمائید Graphic32 اولین ایتم شما رو به سایت آشنای SourceForge و به آدرس http://sourceforge.net/projects/graphics32/
راهنمایی خواهد کرد (البته قبلش تمهیداتی رو برای SorceForge باید در نظر بگیری که این روزها کمی نامهربان شده اند:اشتباه:). خلاصه اون دکمه سبز دانلود پکیجی از Graphic32 رو به دنبال خواهد داشت که پکیج هاش تا دلفی 2010 رو به راحتی ساپورت می کنه و نصبش به سادگی صورت می گیره، در ضمن در فولدر مثال هاش که تو همین مجموعه هست، نمونه های فراوانی وجود داره ... که عکس اونی که به کار شما می آید رو تو پست قبلی گذاشتم!
می تونید به سادگی هرچه تمام از کد اون مثال الگوبرداری فرمائید.

موفق باشید.

mbshareat
پنج شنبه 18 شهریور 1389, 19:58 عصر
علیکم السلام و رحمة الله و برکاته
جناب moein+ (http://barnamenevis.org/forum/member.php?u=137612) از توجه شما سپاسگذارم.
هم GraphicEX و هم Graphic32 (برای بار دیگر) رو دانلود کردم.اولی رو هم نصب کردم کار کرد.
از اساتید بزرگوار جناب SAASTN و Delphi_CAT (http://barnamenevis.org/forum/member.php?u=37538) هم که قبلا هم به بنده نظر لطفی فرموده بودند تشکر می کنم.امیدوارم طاعات و عبادات همه مقبول خداوند تبارک و تعالی قرار بگیره.
استدعا می کنم در آینده هم محبت کنید من رو یاری کنین.
(من جاء بالحسنة فله عشر امثالها و من جاء بالسیئة فلا یجزی الا مثلها و هم لا یظلمون)
:سوره مبارکه انعام -آیه 160

moein+
جمعه 19 شهریور 1389, 01:54 صبح
سلام،
دوست عزیز مشکلاتتون در نصب و استفاده از هر یک رو بیان کنید، سعی می کنیم باهم حلش کنیم
در مورد GraphicEX که اساسا یک Library هست و نیاز به نصب نداره فقط کافی مسیر اونو به قسمت LibraryPath دلفیتون اضافه کنید ..

دستیابی به LibraryPath ::لبخند:
منوی Tools، گزینه Options... در پنجره ای که باز می شود از ساختار درختی سمت چپ گزینه Library -Win32 رو انتخاب کنید و در قسمت اول از پنل سمت راست LibraryPath ، به ویرایشگر آن رفته و مسیری که GraphicEX در آن قرار دارد را اضافه کنید
مثلا :

E:\Delphi\ExLib\GraphicEX\
موفق باشید...

mbshareat
شنبه 20 شهریور 1389, 12:24 عصر
با سلام و خدا قوت:قلب:
عید سعید فطر (دیروز!) رو به سروران عزیز تبریک عرض می کنم.:لبخندساده:
از توجه و محبت جناب moein+کمال تشکر رو دارم. دوستان حق داشتند بنده Graphic32 رو درست نصب نکرده بودم.از یه فایل تو خود شاخه نحوه نصب رو خوندم و نصب کردم.(به قول ؟ شاید باید مشکلات اساسی تر مثل نصب کامپوننت رو حل کنم)
با اجازه جناب Delphi_CAT می خوام یه چیزی رو اعتراف کنم. :خجالت:همون استفاده از StretchBlt کارم رو راه می انداخت ولی ظاهرا تعیین مد کشش تصویر رو نمی شه تو برنامه فقط یک بار برای چند بار استفاده انجام داد(این هم مثل بعضی چیزهای دیگست که اتفاقی می شه فهمید مثل اینکه گاهیFreeImage لازمه ونقطه دوم ترسیم خط و دایره و مستطیل نیاز به دقت داره و Refresh هم گاهی! لازمه...)
از اینجا به بعد برای برنامه نویسهای مثل خودمه!
این هم کدی که برای تغییر اندازه مناسبه و مثال استفاده از اون (توجه داشته باشین که اگر SetStretchBltMode رو از پروسیجر خارج کنین و قبل از فراخوانی پروسیجر STBlt بذارین نتیجه تصویری بی کیفیت می شه.)

procedure StBlt(B,B2:TBitmap;B2R:TRect);
Begin
B2.PixelFormat := pf24Bit;
B2.Palette := B.Palette;
SetStretchBltMode(image2.Picture.Bitmap.Canvas.Han dle, HalfTone);
StretchBlt(B2.Canvas.Handle,B2R.Left,B2R.Top
,(B2R.Right-B2R.Left)+1,(B2R.Bottom-B2R.Top)+1
,B.Canvas.Handle,0,0,B.Width,B.Height, SRCCOPY);
End;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
STBlt(image1.Picture.Bitmap,image2.Picture.Bitmap, image2.ClientRect);
end;

می تونین نمونه برنامه رو هم بردارین(حواستون به Refresh آخر کار باشه در ضمن image2.Picture.Bitmap.Canvas.ClipRect نمی شه با image2.ClientRect جایگزین کرد):

SAASTN
شنبه 20 شهریور 1389, 18:30 عصر
من تو پست قبلیم گفته بودم که HalfTone به کاری که شما می خوای انجام بدی ربطی نداره، که متاسفانه اشتباه می کردم. این کلمه توی راهنما در مورد دو موضوع مختلف استفاده شده، دوباره رفتم خوندم و دیدم شما درست می گید.
در واقع دلفی بازم کم کاری کرده و این حالت رو تو CoptRect ندیده، اگه از کد زیر استفاده کنید دیگه نیازی به Refresh و ... نیست:
Image2.Picture.Bitmap.Width := (Image1.Width * 8) div 10;
Image2.Picture.Bitmap.Height := (Image1.Height * 8) div 10;
SetStretchBltMode(Image2.Canvas.Handle, HALFTONE);
Image2.Canvas.CopyRect(Image2.ClientRect, Image1.Canvas, Image1.ClientRect);

mbshareat
یک شنبه 21 شهریور 1389, 11:52 صبح
سلام و روز خوش
جناب SAASTN عزیز از الطاف خفیه و جلیه شما سپاسگزارم.
برنامتون خوب کار کرد.فقط خط آخر برنامتون باید اینگونه اصلاح بشه تا اندازه رو 80 در صد بکنه:

Image2.Canvas.CopyRect(Image2.ClientRect, Image1.Canvas, Image1.Picture.Bitmap.Canvas.ClipRect);