Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将整个DataGridView保存为图像_C#_Winforms_Datagridview_Bitmap - Fatal编程技术网

C# 将整个DataGridView保存为图像

C# 将整个DataGridView保存为图像,c#,winforms,datagridview,bitmap,C#,Winforms,Datagridview,Bitmap,我需要将整个DataGridView保存为图像。 我在网上看到过一些帖子,但对我来说不起作用。 到目前为止,我已经尝试了以下两个链接: 和。 我的意图是,一旦按下按钮,DataGridView将转换为图像,并自动保存到桌面 我正在使用的代码生成一个错误: GDI中发生一般性错误+ 希望能得到一些帮助。谢谢 尝试替换位图.Save(@“C:\\Desktop\\datagrid.jpg”)带有: File.WriteAllBytes(@"C:\\Desktop\\datagrid.jpg", (b

我需要将整个DataGridView保存为图像。
我在网上看到过一些帖子,但对我来说不起作用。
到目前为止,我已经尝试了以下两个链接:

和。

我的意图是,一旦按下按钮,DataGridView将转换为图像,并自动保存到桌面

我正在使用的代码生成一个错误:

GDI中发生一般性错误+


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

尝试替换
位图.Save(@“C:\\Desktop\\datagrid.jpg”)带有:

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

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


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

  • bitmap.Save(@“C:\\Desktop\\datagrid.jpg”)。此路径字符串应为:
    @“C:\Users\SomeUser\Desktop\datagrid.jpg”

    “C:\\Users\\SomeUser\\Desktop\\datagrid.jpg”
    。见第6点
  • 计算DataGridView高度时,不包括网格标头。
  • 创建
    位图
    对象时,必须将该对象与创建的任何其他一次性对象一样处理掉。可以使用)方法或将对象包含在块中
  • Bitmap.Save([Path])
    在不指定位图的情况下,创建一个
    PNG
    图像。不考虑在路径字符串中插入的文件扩展名。此时,您正在创建一个扩展名为
    .jpg
    的文件,而实际上它是一个
    .png
    文件。
  • 保存此类位图时,应使用
    Png
    格式,而不是
    Jpeg
    。它的低损耗压缩更加精确:它将保留图像颜色并提高整体质量
  • 当前用户桌面的路径不应硬编码。此路径由返回
  • 您可以按如下方式修改代码:

    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;
    }
    

    此行`bitmap.Save(Path.Combine(DesktopFolder,“datagridview1.png”),ImageFormat.png);}`是指`位图.Save(Path.Combine(DesktopFolder,\\datagridview1.png),ImageFormat.png);}@一点也不。这是我们的工作。查看文档。好的,我以为你在使用其他方法连接这两条路径,请阅读
    路径。合并
    方法,非常感谢。嗨,吉米。非常感谢你的指点。您的代码显著改进了最终输出。:)@masyita shariff我很高兴听到它:)除了没有其他的e之外,请注意,只有当位图同时具有Hi-Dhanushka维度时,这才有效。如果只有一行,则您的方法能够将datagridview完全保存为图像。如果有两行或更多行,则第二行之后的列将被阻塞。不过,我也感谢你的帮助。谢谢
    
    bitmap.Save(@"C:\Users\User\Desktop\datagrid.jpg");
    
    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;
    }