Сохранить весь DataGridView как изображение - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно сохранить весь DataGridView в виде изображения.
Я видел некоторые посты в сети, но у меня это не сработало.
Пока я пробовал эти 2 ссылки:

DataGridView в Bimap и Сохранить изображение в папке .

Я хочу сказать, что после нажатия кнопки DataGridView будетпреобразовать в изображение, и оно будет автоматически сохранено на рабочем столе.

Код, который я использую, генерирует ошибку:

В GDI произошла общая ошибка +

     private void button1_Click(object sender, EventArgs e) 
    {
        //Resize DataGridView to full height.
        int height = dataGridView1.Height;
        dataGridView1.Height = dataGridView1.RowCount * dataGridView1.RowTemplate.Height;

        //Create a Bitmap and draw the DataGridView on it.
        Bitmap bitmap = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height);
        dataGridView1.DrawToBitmap(bitmap, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height));

        //Resize DataGridView back to original height.
        dataGridView1.Height = height;

        //Save the Bitmap to folder.

       bitmap.Save(@"C:\\Desktop\\datagrid.jpg");
    }

Надеюсь получить помощь.Спасибо!

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

попробуйте

путь к файлу сохранения изображения, например: " C: \ Users \ User \ Desktop \ datagrid.jpg "

bitmap.Save(@"C:\Users\User\Desktop\datagrid.jpg");

enter image description here

0 голосов
/ 26 ноября 2018

Вам необходимо исправить более одного раздела вашего кода:

  1. bitmap.Save(@"C:\\Desktop\\datagrid.jpg");.Эта строка пути должна быть:
    @"C:\Users\SomeUser\Desktop\datagrid.jpg" или
    "C:\\Users\\SomeUser\\Desktop\\datagrid.jpg".См. Пункт 6.
  2. При вычислении высоты DataGridView вы не включаете заголовок сетки.
  3. При создании объекта Bitmap этот объект должен быть удален, так каклюбой другой одноразовый предмет, который вы создаете.Вы можете использовать метод Bitmap.Dispose () или заключить ваш объект в Используя блок .
  4. Bitmap.Save([Path]), без указания ImageFormat , создает PNG изображение.Расширение файла, которое вы вставляете в строку Path, не рассматривается.В настоящее время вы создаете файл с расширением .jpg, тогда как на самом деле это файл .png.
  5. При сохранении этого файла следует использовать формат Png, а не Jpeg.вид растрового изображения.Его сжатие без потерь более адекватно: оно сохранит цвета изображения и улучшит общее качество.
  6. Путь к рабочему столу текущего пользователя не должен быть жестко закодирован.Этот путь возвращается Environment.SpecialFolder.Desktop .

Вы можете изменить свой код следующим образом:

using System.IO;

private void button1_Click(object sender, EventArgs e)
{
    int DGVOriginalHeight = dataGridView1.Height;
    dataGridView1.Height = (dataGridView1.RowCount * dataGridView1.RowTemplate.Height) + 
                            dataGridView1.ColumnHeadersHeight;

    using (Bitmap bitmap = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height))
    {
        dataGridView1.DrawToBitmap(bitmap, new Rectangle(Point.Empty, this.dataGridView1.Size));
        string DesktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        bitmap.Save(Path.Combine(DesktopFolder, "datagridview1.png"), ImageFormat.Png);
    }
    dataGridView1.Height = DGVOriginalHeight;
}
0 голосов
/ 26 ноября 2018

Попробуйте заменить bitmap.Save(@"C:\\Desktop\\datagrid.jpg"); на:

File.WriteAllBytes(@"C:\\Desktop\\datagrid.jpg", (byte[])new ImageConverter().ConvertTo(bitmap, typeof(byte[])));
...