2009-10-07 1 views
3

Мои фотобумаги иногда очищаются от всех рисунков, когда они сделаны, создавая изображение, а иногда и наполовину. Вызов GC.Collect() перед запуском чертежа позволяет ему нарисовать БОЛЬШЕ перед тем, как он очистится, но как я могу остановить его полностью очистить?Принуждение PictureBox сохранить изображение, если изображение было нарисовано с использованием кода в vb.net

Это в vb.net

Спасибо!

ответ

1

Простой способ сохраняются нарисованные изображения в .NET, чтобы сделать рисунок на отдельный объект Bitmap, а затем установите PictureBox в свойство изображения, равное Bitmap, как это:

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

К сожалению, это C#, но он должен проиллюстрировать принцип ОК.

Еще один способ сохранения обрамленных изображений - сделать рисунок в событии PaintBox Paint, но это означает, что ваш код чертежа будет выполняться каждый раз, когда элемент управления должен перерисовываться (что происходит, когда другая форма перетаскивается поверх нее и т.д.). Вышеуказанный метод (настройка свойства изображения элемента управления) проще.

+0

Поставлено! Бит медленнее, но если я минимизирую окно, он быстрее будет работать. Учитывая, что он должен отображать 30 000 пикселей INDIVIDUALLY, 3 секунды - это плохо. – Cyclone

+0

Если вы рисуете пиксель за пикселем, более быстрый, но немного более сложный метод заключается в вызове метода LockBits в Bitmap. См. Http://www.vb-helper.com/howto_net_lockbits_image_class.html или http://www.bobpowell.net/lockingbits.htm – MusiGenesis

+0

Я использовал SetPixel, который был довольно медленным, как вы можете себе представить, особенно потому, что я добавил некоторые application.doevents() to lol – Cyclone

0

В приведенном выше случае, когда объект «bmp» или «g» выходит из области видимости и сбора мусора, изображение с изображениями изменяется. Я думаю, что изображение всегда ссылается на копию. Я попробовал bmp.clone, чтобы скопировать изображение на изображение, но все же, когда bmp собирает мусор, изображение с изображениями исчезает. В моем случае у меня есть ряд (определенных во время выполнения) таких изображений, которые должны быть назначены для созданных графических ячеек времени исполнения.

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()