إجبار مربع صور للحفاظ على صورته إذا تم رسم الصورة باستخدام التعليمات البرمجية في vb.net

StackOverflow https://stackoverflow.com/questions/1529211

  •  20-09-2019
  •  | 
  •  

سؤال

تصطحي علب الصور الخاصة بي أحيانا من جميع الرسومات عند الانتهاء من إنشاء الصورة، أو في بعض الأحيان في منتصف الطريق. استدعاء gc.Collect () قبل بدء تشغيل الرسم يتيح لها رسم أكثر قبل أن يزيل، ولكن كيف يمكنني إيقافه من المقاصة بالكامل؟

هذا في vb.net

شكرًا!

هل كانت مفيدة؟

المحلول

طريقة سهلة لاستمرار الصور المرسومة في .NET هي القيام بالرسوم على كائن نقطي منفصل، ثم قم بتعيين خاصية صورة PictureBox تساوي الصورة النقطية، مثل هذا:

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    // draw whatever
}
pictureBox1.Image = bmp;

آسف هذا هو C #، ولكن يجب أن توضح المبدأ موافق.

هناك طريقة أخرى لاستمرار الصور المسجلة هي القيام بالرسم في حدث الطلاء في PictureBox، ولكن هذا يعني أن رمز الرسم سوف ينفذ في كل مرة يحتاج عنصر التحكم إلى إعادة رسم نفسه (والذي يحدث كلما تم سحب نموذج آخر على رأسه وما إلى ذلك.). الطريقة أعلاه (إعداد خاصية صور التحكم) هي أبسط للقيام به.

نصائح أخرى

في الحالة المذكورة أعلاه، عندما يخرج كائن "BMP" أو "G" من النطاق والكمال الذي تم جمعه، يتغير صورة PictureBox. أعتقد أن الصورة مرجوعة دائما نسخها. حاولت BMP.Clone لنسخ الصورة على صورة Picture ولكن لا يزال عند جمع القمامة BMP، تختفي صورة PictureBox. في حالتي، لدي عدد من (تحديد وقت التشغيل) مثل هذه الصور التي سيتم تعيينها في وقت التشغيل التي تم إنشاؤها.

Dim bm As New Bitmap("C:\picture.bmp")
Dim thumb As New Bitmap(42, 30)
Dim g As Graphics = Graphics.FromImage(thumb)

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel)
pbxHead.Image = thumb.Clone()

g.Dispose()
bm.Dispose()
thumb.Dispose()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top