C # Сохранить несколько диаграмм в одном изображении - PullRequest
1 голос
/ 21 марта 2019

В настоящее время я пытаюсь разработать winform, которая отображает управление несколькими диаграммами на макете панели управления. Я знаю, как сохранить элемент управления диаграммой один за другим, но как сохранить несколько элементов управления диаграммой в одном формате изображения (например, png / jpg)? Сначала я пытаюсь сохранить их в потоке, но не могу сохранить их все в одном изображении.

Пожалуйста, наставь меня в этом. Спасибо

Код:

 try
            {
                if (dgvDataLog.Rows.Count > 0)
                {
                    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
                    saveFileDialog1.Title = "Save PNG Files";
                    saveFileDialog1.CheckPathExists = true;
                    saveFileDialog1.DefaultExt = "png";
                    saveFileDialog1.Filter = "PNG files (*.png)|*.png";
                    saveFileDialog1.FilterIndex = 2;
                    saveFileDialog1.RestoreDirectory = true;
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        using (var chartimage = new MemoryStream())
                        {
                            tabPageChart1.SaveImage(chartimage, ChartImageFormat.Png);
                            tabPageChart2.SaveImage(chartimage, ChartImageFormat.Png);
                            tabPageChart3.SaveImage(chartimage, ChartImageFormat.Png);
                        }

                        MessageBox.Show("Image Saved At " + saveFileDialog1.FileName, "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("No Record To Be Export.", "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
            }
            catch (SystemException errMsg)
            {
                MessageBox.Show(errMsg.ToString());
            }

1 Ответ

2 голосов
/ 21 марта 2019

Сначала напишите метод для преобразования ваших диаграмм в изображения:

    List<Image> ChartsToImages(List<Chart> charts)
    {
        var imageList = new List<Image>();            
        foreach (var c in charts)
        {
            using (var ms = new MemoryStream())
            {
                c.SaveImage(ms, ChartImageFormat.Png);
                var bmp = System.Drawing.Bitmap.FromStream(ms);
                imageList.Add(bmp);
            }
        }
        return imageList;
    }

, затем метод для сшивания всех ваших изображений:

    private static Image MergeImages(List<Image> imageList)
    {
        var finalSize = new Size();
        foreach (var image in imageList)
        {
            if (image.Width > finalSize.Width)
            {
                finalSize.Width = image.Width;
            }
            finalSize.Height += image.Height;
        }
        var outputImage = new Bitmap(finalSize.Width, finalSize.Height);
        using (var gfx = Graphics.FromImage(outputImage))
        {
            var y = 0;
            foreach (var image in imageList)
            {
                gfx.DrawImage(image, 0, y);
                y += image.Height;
            }
        }
        return outputImage;
    }

Наконец, соберите все вместе:

        var chartList = new List<Chart> {tabPageChart1, tabPageChart2, tabPageChart3};
        var imageList = ChartsToImages(chartList);
        var finalImage = MergeImages(imageList);
        finalImage.Save("C:\\Junk\\Junk.png", ImageFormat.Png);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...