Взять битмап пикчербокса
У меня есть условный рисунок внутри пикчербокс1, надо его вынести в пикчербокс2. В русскоязычном интернете не нашел.
Graphics g = pictureBox1.CreateGraphics();
Graphics gg = pictureBox2.CreateGraphics();
g.FillRectangle(new SolidBrush(Color.Red), 0, 0, 10, 10);
gg = g;
Я не нашел как это сделать, есть только одно обсуждение в русскоязычном интернете: https://coderoad.ru/1063505/%D0%9A%D0%B0%D0%BA-%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-picturebox-%D0%B2-%D0%B2%D0%B8%D0%B4%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-jpeg-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D0%B5%D0%B3%D0%BE . Но они так и не нашли ответ.... Единственное решение это рисовать сразу в битмап, а потом присваивать его.
Ответы (2 шт):
В заголовке у вас написано "битмап". Bitmap - это растровое изображение.
В коде у вас векторные команды рисования на Graphics.
Так что именно вам нужно?
Если нужен битмап, создавайте объект типа Bitmap и рисуйте на его графиксе. Потом это растровое изображение можно присваивать свойству (Background)Image любого контрола. Можно и в файл сохранять.
Кроме того, если просто рисовать на графиксе, созданном у контрола вызовом метода CreateGraphics(), то рисунок будет исчезать, например, после сворачивания-разворачивания формы. Чтобы рисунок оставался, нужно рисовать в событии Paint.
Если вам нужно работать именно с векторной графикой, создайте отдельный метод для отрисовки. Наподобие:
private void Draw(Graphics graphics)
{
using (var brush = new SolidBrush(Color.Red))
{
graphics.FillRectangle(brush, 0, 0, 10, 10);
}
}
Обратите внимание на использование using - кисть является ресурсом, который нужно освобождать. Это важно!
Теперь этот метод можно использовать для рисования на любых контролах:
Draw(pictureBox1.CreateGraphics());
Draw(pictureBox2.CreateGraphics());
Как уже было сказано, рисовать нужно в событии Paint. Используем этот метод в нём:
private void PictureBox_Paint(object sender, PaintEventArgs e)
{
Draw(e.Graphics);
}
На это событие можно подписать любой пикчабокс (и вообще контрол).
Попробуйте через Bitmap:
Bitmap img_bitmap = new Bitmap(PaintPictureBox.Image); PaintPictureBox.Image = img_bitmap;