winforms 将整个DataGridView另存为图像

wtzytmuj  于 2022-11-25  发布在  其他
关注(0)|答案(3)|浏览(307)

我需要将整个DataGridView另存为Image。
我在网上看到过一些帖子,但它对我不起作用。
到目前为止,我已经尝试了这2个链接:
DataGridView to BimapSave Image in folder中的一个或多个。
我的意图是,一旦按下按钮,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");
    }

希望能得到一些帮助。谢谢!

yqhsw0fo

yqhsw0fo1#

您需要修复代码的多个部分:

  1. bitmap.Save(@"C:\\Desktop\\datagrid.jpg");。此路径字符串应为:
@"C:\Users\SomeUser\Desktop\datagrid.jpg"

"C:\\Users\\SomeUser\\Desktop\\datagrid.jpg"`

见第6点。
1.计算DataGridView高度时,不包括网格的页眉。
1.当创建Bitmap对象时,该对象必须被释放,就像您创建的任何其他可释放对象一样。您可以使用Bitmap.Dispose()方法或使用using语句声明您的对象(首选)。

  1. Bitmap.Save([Path]),而不指定ImageFormat,会建立PNG影像。您在Path字串中插入的副档名不会被考虑。此时,您建立的档案副档名为.jpg,而实际上是.png档案。
    1.保存这种位图时,应该使用Png,而不是Jpeg。它的无损压缩更合适:它将保留图像颜色并提高整体质量。
    1.目前使用者桌面的路径不应该是硬式编码。此路径是由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(dataGridView1.Width, dataGridView1.Height))
    {
        dataGridView1.DrawToBitmap(bitmap, new Rectangle(Point.Empty, dataGridView1.Size));
        string DesktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        bitmap.Save(Path.Combine(DesktopFolder, "datagridview1.png"), ImageFormat.Png);
    }
    dataGridView1.Height = DGVOriginalHeight;
}
gmxoilav

gmxoilav2#

试试这个
图像保存文件路径,如“C:\Users\User\Desktop\datagrid.jpg

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

zzlelutf

zzlelutf3#

尝试将bitmap.Save(@"C:\\Desktop\\datagrid.jpg");替换为:

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

相关问题