Как реализовать сохранение и выбор изображения для экспорта в WORD из динамической панели
В данный момент при нажатии кнопки экспорта, программа делает новый скрин, который передает в Word, и сохраняет в папку. не могу найти метод получения изображения из динамической панели. Подскажите пожалуйста чем заменить Bitmap bmp = new Bitmap(pb_capture.Image, 300, 200);, чтобы получить изображение из уже имеющегося динамически созданного picturebox
private void btn_screenshot_Click(object sender, EventArgs e)
{
try
{
var panel = new TableLayoutPanel();
panel.AutoSize = true;
panel.MouseDown += btn_screenshot_MouseDown;
Mat m = new Mat();
capture.Retrieve(m);
//параметры скриншота
var pb = new PictureBox();
pb.Image = m.ToImage<Bgr, byte>().Flip(Emgu.CV.CvEnum.FlipType.None).Bitmap;
pb.SizeMode = PictureBoxSizeMode.Zoom;
pb.Name = $"SMV_{tb_surename.Text}_{DateTime.Now.Hour}_{DateTime.Now.Minute}_{DateTime.Now.Second}_{DateTime.Now.Millisecond}";
pb.Height = pb.Image.Height/4;
pb.Width = pb.Image.Width/4;
pb.MouseDown += btn_screenshot_MouseDown;
//имя
var name = new Label();
name.MouseDown += btn_screenshot_MouseDown;
name.Text = $"SMV_{tb_surename.Text}_{DateTime.Now.Hour}_{DateTime.Now.Minute}_{DateTime.Now.Second}_{DateTime.Now.Millisecond}";
//кнопка экспорта
var exportimage_btn = new Button();
exportimage_btn.Text = "Выбрать";
exportimage_btn.MouseDown += btn_screenshot_MouseDown;
exportimage_btn.Click += Exportimage_btn_Click;
//кнопка удалить
var deleteimage_btn = new Button();
deleteimage_btn.Text = "Удалить";
deleteimage_btn.MouseDown += btn_screenshot_MouseDown;
deleteimage_btn.Click += Deleteimage_btn_Click;
//добавление панели
panel.Controls.Add(pb);
panel.Controls.Add(name);
panel.Controls.Add(exportimage_btn);
panel.Controls.Add(deleteimage_btn);
flp_1.Controls.Add(panel);
//сделать скриншот
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void Exportimage_btn_Click(object sender, EventArgs e)
{
var exportButton = (Button)sender;
var tableLayoutPanel = exportButton.Parent;
tableLayoutPanel.Controls.Remove(exportButton);
flp_2.Controls.Add(tableLayoutPanel);
exportButton.Dispose();
if (!Directory.Exists(@"D:\BASE\Images"))
{
Directory.CreateDirectory(@"D:\BASE\Images");
MessageBox.Show("Папка для снимков создана");
}
else
{
string path = @"D:\BASE\Images";
path += $@"\{tb_surename.Text}_{DateTime.Now.Day} {DateTime.Now.Month} {DateTime.Now.Year}_{DateTime.Now.Hour} {DateTime.Now.Minute} {DateTime.Now.Second} {DateTime.Now.Millisecond}.png";
Bitmap bmp = new Bitmap(pb_capture.Image, 300, 200);
bmp.Save(path, ImageFormat.Png);
// pb_capture.Image.Save(path, ImageFormat.Png);
PathPNG.Add(path);
}
}
Можно ли действие Exportimage_btn_Click прописать в теле private void btn_screenshot_Click(object sender, EventArgs e), чтобы использовать все локальные переменные используемые в этом действии, или есть какой то более правильный метод решения этой проблемы?