PDA

View Full Version : حرفه ای: چطور میشه از پر شدن حافظه جلوگیری کرد؟



mmbguide
دوشنبه 14 مهر 1393, 19:44 عصر
سلام به همه

من روی فرم یک PictureBox قرار دادم که قرار یک عکس رو نمایش بده. هم چنین دو ScrollBar عمودی و افقی نیز قرار دادم که مقدار Max و Min اون ها با توجه به ابعاد تصویر تغییر میکنه. حالا من قصد دارم هر زمان که ScrollBarها را جاجا می کنم یک خط افقی و عمودی در مختصات مشخصی از تصویر نمایش داده بشه.

124285
برای این کار من از کد زیر استفاده کردم. اما یک مقدار که ScrollBar ها رو جابجا میکنم با پیغام Out of memeory مواجه میشم و برنامه بسته میشه.



[VB]Me.PictureBox1.Image = Nothing


Dim b As New Bitmap("C:\Users\Public\Pictures\Sample Pictures\Penguins.JPG")
Dim G As Graphics = Graphics.FromImage(b)
G.DrawLine(Pens.White, Me.HScrollBar1.Value, 0, Me.HScrollBar1.Value, b.Width)
G.DrawLine(Pens.White, 0, Me.VScrollBar1.Value, b.Width, Me.VScrollBar1.Value)
G.DrawRectangle(Pens.White, Me.HScrollBar1.Value - 10, Me.VScrollBar1.Value - 10, 20, 20)


Me.PictureBox1.Image = b
Me.PictureBox1.Update()

مهرداد صفا
دوشنبه 14 مهر 1393, 19:49 عصر
سلام.
شی Graphics رو با خود PictureBox بسازید:


pictureBox1.CreateGraphics().Draw.....

mmbguide
سه شنبه 15 مهر 1393, 00:24 صبح
سلام

من دوتا مشکل دارم. چطور میشه CreateGraphics با ابعاد ولقعی تصویر از شیء PictureBox بسازم؟ جدای از اندازه گرافیک، وقتی ScrollBar را حرکت میدم خط دیده میشه ولی وقتی کلید ماوس رو رها میکنم خط محو میشه. راه حل چیست؟

pouria_bayat
سه شنبه 15 مهر 1393, 01:46 صبح
GC.Collect();

pouria_bayat
سه شنبه 15 مهر 1393, 01:49 صبح
سلام

من دوتا مشکل دارم. چطور میشه CreateGraphics با ابعاد ولقعی تصویر از شیء PictureBox بسازم؟ جدای از اندازه گرافیک، وقتی ScrollBar را حرکت میدم خط دیده میشه ولی وقتی کلید ماوس رو رها میکنم خط محو میشه. راه حل چیست؟
خب احتمالا دائم داره تصویر PICBOX عوض میشه، باید فقط زمانی که کلیک رو نگه داشتی تصویر ها تغییر کنه بعدش نه روی خاصیت MouseDown کار کن.

مهرداد صفا
سه شنبه 15 مهر 1393, 11:14 صبح
سلام.
رویداد paint رو هندل کنید.

rahnema1
سه شنبه 15 مهر 1393, 12:14 عصر
احتمالا علت out of memory اینه که شما داخل رویداد صد بار تصویر را از دیسک به حافظه منتقل می کنید
روش بهتر اینه که خارج از رویداد تصویر را به صورت گلوبال داشته باشید و یک تصویر دیگه هم به اندازه اون درست کنید و در رویداد با استفاده از drawimage تصویر اول را روی تصویر دوم ترسیم کنید تا هم سرعت بیشتر بشه و هم out of memory نده

mmbguide
چهارشنبه 30 مهر 1393, 09:23 صبح
سلام

باز هم همون داستانه. ممکنه یک نمونه برام درست کنید؟

rahnema1
چهارشنبه 30 مهر 1393, 11:24 صبح
سلام

باز هم همون داستانه. ممکنه یک نمونه برام درست کنید؟

بفرمایید این هم نمونه
http://www.sharefile.ir/uploads/1414006308.zip