invalidate(); ؟؟؟؟؟

bitaroos

Member
سلام

(زبان c#.net)

من خیلی وقته که با دستور invalidate مشکل دارم.

یه برنامه نوشتم که یه عکس رو بوسیله ی رخداد Paint، روی یک panel نشون میده.

کد:
g.DrawImage(curImage, imageMove.X, imageMove.Y, curImage.Width * zoom, curImage.Height * zoom);
حالا وقتی میام زوم میکنم، یا یه مربع می خوام رسم کنم و .... باید این panel که در اصل بوم نقاشیم هست رو
invalidate کنم، مثلا باید برای ترسیم مستطیل، توی رخداد mouseMove یه دستور invalidate بنویسم.

حالا وقتی invalidate اجرا میشه، تمام صفحه ام شروع به چشمک زدن میکنه. فیلم پیوستی رو ببینید

آیا میشه کاری کرد که لایه ی عکس برا خودش جدا باشه و فقط invalidation رو روی مربعی که دارم رسم میکنم
اجرا کنم؟(منظورم این نیست که از دستور invalidation(region); i استفاده کنم)
اصلا استفاده از پنل بجای پیکچرباکس عاقلانس؟
با پیکچرباکس چه کار خاصی میشه کرد که با پنل نمیشه انجامش داد؟

-----------------------------------------------------------------------------------------------------------------------
اول می خواستم، تصویرم رو به عنوان بک گراند یه panel قرار بدم و موقع زوم، ابعاد پنل رو تغییر بدم ولی ابعاد پنل
محدوده و از یه حدی بیشتر نمیره.

وقتی یه شکلی (مثلا مستطیل) روی panel میکشم (در حالی که عکس رو زوم کردم)، باید نقطه آغازی عکس و
مقدار زوم مشخص باشه تا وقتی زوم رو تغییر میدم، اون مستطیل مکانش و ابعادش رو با توجه به زوم جدید تغییر
بده.

ببخشید، بعد از ارسال متوجه شدم پست رو تو مکان اشتباهی ایجاد کردم
 

پیوست ها

  • Untitled.rar
    876.4 کیلوبایت · بازدیدها: 1
آخرین ویرایش:
دوست عزیز کنترل پنل برای چیدمان عناصر بکار میره .و شما اومدید در واقع بک گراندشو یک تصویر گذاشتید و می خواید با تغیز سایزش بک گراند هم عوض بشه اگه دقت کرده باشید اگه یک کنترل مثل یک دکمه درونش فرار بدید اگه anchorرو تنظیم نکنید دکمه فاصلش تنظیم نمیشه.البته من شخصا از فروم ویندوزی کمتر استفاده می کنم ولی اگه می خواید از پانل ها یا دکوراتور ها استفاده کنیدwpfرو بهتون پیشنهاد می کنم.
پیکچر باکس هم برای پردازش و ترسیم مستقیم تصویر بکار می ره واین مشکل رو نداره چون درواقع شما خود خود تصویر رو سایزشو تغیر می دید ولی پانل در واقع شما کنترل فرزند رو تغیر سایز می خواهید بدید و به این خاطر برای تنظیم کردن فاصله خود با والد چشمک میزنه.
می بخشی بد توضیح دادم.
 

bitaroos

Member
سلام دوست عزیز

ممنون از پاسختون

و شما اومدید در واقع بک گراندشو یک تصویر گذاشتید و می خواید با تغیز سایزش بک گراند هم عوض بشه
نه من گفتم: می خواستم عکس رو به عنوان بک گراند قرار بدم ولی اینکار رو نکردم.
من با دستورات GDI در رخداد Paint مربوط به panel، تصویرم رو رسم کردم.
و وقتی اینکار رو بکنیم، برای هر تغییری که توی تصویر بخوایم ایجاد کنیم، باید panel رو invalidate کنیم
که اینکار باعث چشمک زدن صفحه میشه (یه جور مثل رندر کردن تو برنامه های 3D می مونه)

حالا من می خوام یه کاری کنم که وقتی شکلی روی تصویر می خوام رسم کنم (مثل برنامه Paint ویندوز)
دیگه صفحه ام چشمک نزنه، مثل paint یا PhotoShop که وقتی با قلمو ترسیم انجام میدیم یا وقتی زوم
می کنیم، صفحه چشمک نزنه

ولی اگه می خواید از پانل ها یا دکوراتور ها استفاده کنیدwpfرو بهتون پیشنهاد می کنم.

من یه مدت با WPF کار میکردم، ولی چون اکثر کار هایی که انجام میدم، پردازش تصویره، برای پردازش تصویر تو
محیط WPF به مشکل بر میخوردم. (چی کار کنیم، هنوز مونده تا بخوایم یه برنامه نویس خوب بشیم)

پیکچر باکس هم برای پردازش و ترسیم مستقیم تصویر بکار می ره واین مشکل رو نداره چون درواقع شما خود خود تصویر رو سایزشو تغیر می دید ولی پانل در واقع شما کنترل فرزند رو تغیر سایز می خواهید بدید و به این خاطر برای تنظیم کردن فاصله خود با والد چشمک میزنه.
می بخشی بد توضیح دادم.
الان 2 سه تا کار متفرقه ریخته رو سرم، به محض اینکه انجامشون دادم، میرم سراغ این پیکچر باکس، امید وارم
کارم راه بیوفته

بازم ممنون
 

جدیدترین ارسال ها

بالا