Здравствуйте, _Morpheus_, Вы писали:
_M_>Можно сделать по другому — создать Bitmap, рисовать в нем, а из OnPaint копировать битмап в Graphics.
вобщемто у тебя сейчас так и сделано, за исключением нескольких моментов:
1. Большая ошибка не освобождать Graphics. это приведет к утечке системных ресурсов. Graphics нужно использовать в using'е.
2. метод CreateBitmap возвращает Graphics, хотя называется CreateBitmap
Т.е. для такого варианта нужно делать так:
private Bitmap _bmp = null;
private void Form1_Load(object sender, System.EventArgs e)
{
// инициализация _bmp
panel1_Resize(null, null);
draw();
}
private void panel1_Resize(object sender, System.EventArgs e)
{
// размеры панели изменились - уничтожаем старый и делаем новый битамапif(_bmp!=null)
_bmp.Dispose();
_bmp = new Bitmap(panel1.Width, panel1.Height);
}
private void draw()
{
// рисуем в битмапif(_bmp!=null)
using(Graphics g = Graphics.FromImage(_bmp))
{
g.Clear(Color.White);
PaintHorizontalLine(g);
PaintVerticalLine(g);
PaintTaskWithOutControls(g);
}
}
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
// Когда панель рисует себя рисуем в панель картинку из битмапаif(_bmp!=null)
e.Graphics.DrawImage(_bmp, 0, 0);
}
однако все это делать лучше в отдельном контроле, тогда все будет более наглядно и будет больше возможностей.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[6]: Можно ли получить Bitmap из объекта Graphics ??
подойдет. то как ты сделал это неправильно.
SVV>у меня было что-то подобное — мерцание в этом случае происходит т.к. графикс панели уже залит белым а сетка и объекты еще не прорисовались. SVV>а теперь у меня делается по другоме — сначала рисуется новая картинка — потом она сразу помещается на панель, правда побочный эффект возникает — изменения на панели происходят с небольшой задержкой
эффект мерцания будет наблюдатся в том случае если ты рисуешь не из OnPaint.
Если ты рисуешь в OnPaint и проявляется мерцание, то достаточно включить свойство DoubleBuffered. В этом случае картинка рисуется не сразу на экране, а в памяти и лишь затем, когда ты уже все нарисовал выводится на экран.
Можно сделать по другому — создать Bitmap, рисовать в нем, а из OnPaint копировать битмап в Graphics.
Проблема такая — при перерисовке panel формы, заметно мерцание. Можно ли в объект Вitmap поместить то, что в данный момент нарисовано на панели, а при следующей перерисовке подложить?
Подскажите кто знает, или возможно от мерцания по другому избаваться?
Поймете смысл — найдутся слова.
Катон.
Re: Можно ли получить Bitmap из объекта Graphics ??
Здравствуйте, SlaVVVa, Вы писали:
SVV>Можно ли получить Bitmap из объекта Graphics ?? SVV>Проблема такая — при перерисовке panel формы, заметно мерцание. Можно ли в объект Вitmap поместить то, что в данный момент нарисовано на панели, а при следующей перерисовке подложить?
думаю это не поможет — мерцание по всей видимости вызывает заливка панели.
SVV>Подскажите кто знает, или возможно от мерцания по другому избаваться?
попробуй включить свойство DoubleBuffered у панели
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: Можно ли получить Bitmap из объекта Graphics ??
нет это не подойдет, у меня было что-то подобное — мерцание в этом случае происходит т.к. графикс панели уже залит белым а сетка и объекты еще не прорисовались. а теперь у меня делается по другоме — сначала рисуется новая картинка — потом она сразу помещается на панель, правда побочный эффект возникает — изменения на панели происходят с небольшой задержкой
Поймете смысл — найдутся слова.
Катон.
Re[7]: Можно ли получить Bitmap из объекта Graphics ??
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, SlaVVVa, Вы писали:
SVV>>нет это не подойдет,
_M_>подойдет. то как ты сделал это неправильно.
SVV>>у меня было что-то подобное — мерцание в этом случае происходит т.к. графикс панели уже залит белым а сетка и объекты еще не прорисовались. SVV>>а теперь у меня делается по другоме — сначала рисуется новая картинка — потом она сразу помещается на панель, правда побочный эффект возникает — изменения на панели происходят с небольшой задержкой
_M_>эффект мерцания будет наблюдатся в том случае если ты рисуешь не из OnPaint. _M_>Если ты рисуешь в OnPaint и проявляется мерцание, то достаточно включить свойство DoubleBuffered. В этом случае картинка рисуется не сразу на экране, а в памяти и лишь затем, когда ты уже все нарисовал выводится на экран.
_M_>Можно сделать по другому — создать Bitmap, рисовать в нем, а из OnPaint копировать битмап в Graphics.
все понял, спасибо, а то действительно как-то кривовато у меня это выглядело