View Full Version : سوال: نمایش عکس bmp و انتخاب بخشی با Mouse
Matin_Delphi
یک شنبه 01 فروردین 1389, 15:49 عصر
با سلام
من میخوام یک عکس BMP و در ویژوال ++c لود کنم و یک تیکه از عکسو با موس SELECT کنم و اون تیکه در یک ارایه ای ذخیره شه
amin1softco
دوشنبه 02 فروردین 1389, 09:45 صبح
ببین من نمی دونم جواب دقیقت چی میشه ولی می دونم اصل کار اینجوریه یک فایل بیتمپ شامل یک آرایه دوبعدی از مقادیر رنگ برای هر پیکسل از صفحه ی نمایشه خوب ما الان می خواهیم که یک قسمت از این آرایه را جدا کنیم مسلما به دو تا چیز نیاز دارم از ستون چندم تا سطر چند برای بدست آوردن اینها اول باید وقتی ماوس کلیدش فشرده میشه مختصاتش را بگیریم تا وقتی کلید ماوس رها میشه دو باره مختصات رو بگیریم فاصله این دو نقطه میشه قطر مستطیلی که می خواهیم اطلاعات یک عکس درش ذخیره بشه برای مثال می تونه این دو نقطه شبیه (1و3) و نقطه آخر (4و1) حالا ما می خواهیم که طول و عرض مستطیل را بدست بیاریم باید مختصه افقی را از افقی و عمودی را از عمودی کم کنیم قدر مطلقش میشه طول و عرض مستطیل ما حالا باید مشخصات این مستطیل را با ناحیه رسم فایل بیتمپ مقایسه کنیم و سپس اگر در ناحیه مستطیل ما بود مشخصات را ذخیره کنیم که این کار رو میشه با getpixel انجام داد..........موفق باشی
Matin_Delphi
دوشنبه 02 فروردین 1389, 11:35 صبح
کد این و میتونی بنویسی دمت گرم...
Nima_NF
دوشنبه 02 فروردین 1389, 13:16 عصر
برای نحوه خواندن اطلاعات Bmp و نمایش آن FAQ شماره 29 را مطالعه کنید (http://barnamenevis.biz/forum/showthread.php?t=166590)
Matin_Delphi
دوشنبه 02 فروردین 1389, 15:53 عصر
برای نحوه خواندن اطلاعات Bmp و نمایش آن FAQ شماره 29 را مطالعه کنید (http://barnamenevis.biz/forum/showthread.php?t=166590)
ممنون
حالا چه طور میشه مختصات جاری موس را بدست بیاریم
Nima_NF
دوشنبه 02 فروردین 1389, 16:28 عصر
این کار رو میشه با getpixel انجام داد..........موفق باشی
استفاده از getpixel همیشه راحت ترین کار هست، اما کند ترین و نامناسب ترین روش برای کار با عکس های هست.
در ویندوز و سایر سیتم عامل ها باید از API ها عرضه شده استفاده کرد که بهینه هستند و بسیار سریع تر از کار پیکسلی هستند. مثلا با همان bitblt و امثال آن.
حالا چه طور میشه مختصات جاری موس را بدست بیاریم در win32 و MFC پیام WM_LBUTTONDOWN برای وقتی که موس کلیک می شود و پیام WM_LBUTTONUP برای وقتی که کلیک موس رها می شود.
در win32 سپس در lparam مختصات کنونی mouse قرار می گیرد که می توانید دریافت کنید:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
در MFC در پارامتر دوم تابع override شده رویداد موس که از نوع CPoint هست.
WM_MOUSEMOVE هم برای کلا حرکت موس بدون در نظر گرفتن کلید ها هست.
ضمنا دقت کنید که مختصات موس در پردازش up را زمانی قبول می کنید که Down همچنان پایین نکه داشته شده باشد، یعنی up نشده باشد، این عمل را با یک متغیر bool کنترل کنید.
نمونه مثال برای کار با موس توسط win32 را در این لینک قرار داده بودم. (http://barnamenevis.org/forum/showpost.php?p=549112&postcount=5)
Matin_Delphi
دوشنبه 02 فروردین 1389, 21:19 عصر
[quote=Nima_NF;936706]استفاده از getpixel همیشه راحت ترین کار هست، اما کند ترین و نامناسب ترین روش برای کار با عکس های هست.
.............
ممنون از جواب و پیگیریهاتون ولی من دارم با windows form app< - Visual C++ 2008کد مینویسم
Matin_Delphi
سه شنبه 03 فروردین 1389, 12:42 عصر
اقا من هرچی از کدای شمارو استفاده میکنم ارور میده:عصبانی++:
Nima_NF
سه شنبه 03 فروردین 1389, 14:48 عصر
اقا من هرچی از کدای شمارو استفاده میکنم ارور میده:عصبانی++:
برای کدهای فوق باید یک پروژه MFC یا win32 بسازید.
windows form یعنی برنامه نویسی .Net با C++ .
این نوع برنامه نویسی از نوع Native نیست و این بخش نیز معمولا برای سوالات MFC و win32 هست.
لذا شما در ابتدا باید این موضوع را مشخص می کردید و ازدوستان .net کار درخواست می کردید.
Matin_Delphi
چهارشنبه 04 فروردین 1389, 13:23 عصر
اقا دمت گرم فعلا تا حدی جوابمو گرفتم
تو MFC->dialog box نداره برای لود کردن و سیو کردن تصویر اینم کدشو بدی ممنون میشم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.