C# “例外情况”;参数不正确";

C# “例外情况”;参数不正确";,c#,C#,我试图编写一个将memorystream转换为png图像的代码,但在使用(image img=image.FromStream(ms))时遇到ArgumentException“参数不正确”错误。它没有进一步指定它,所以我不知道为什么会出现错误,我应该怎么做 另外,如何将宽度参数与img.Save(filename+“.png”,ImageFormat.png)一起使用;?我知道我可以添加参数,它可以识别“宽度”,但我不知道它应该如何格式化,以便VisualStudio接受它 using Sys

我试图编写一个将memorystream转换为png图像的代码,但在使用(image img=image.FromStream(ms))时遇到ArgumentException“参数不正确”错误。它没有进一步指定它,所以我不知道为什么会出现错误,我应该怎么做

另外,如何将宽度参数与img.Save(filename+“.png”,ImageFormat.png)一起使用;?我知道我可以添加参数,它可以识别“宽度”,但我不知道它应该如何格式化,以便VisualStudio接受它

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        MemoryStream ms = new MemoryStream();
        public string filename;

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFile();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ConvertFile();
        }

        private void OpenFile()
        {
            OpenFileDialog d = new OpenFileDialog();

            if(d.ShowDialog() == DialogResult.OK)
            {
                filename = d.FileName;
                var fs = d.OpenFile();
                fs.CopyTo(ms);
            }
        }

        private void ConvertFile()
        {
            using(Image img = Image.FromStream(ms))
            {
                img.Save(filename + ".png", ImageFormat.Png);
            }
        }
    }
}

我怀疑问题在于您如何读取此处的文件:

fs.CopyTo(ms);
您正在将文件内容复制到
MemoryStream
,但将
MemoryStream
放在数据的末尾而不是开始处。您可以通过添加以下内容来解决此问题:

// "Rewind" the memory stream after copying data into it, so it's ready to read.
ms.Position = 0;

你应该考虑一下如果你多次点击按钮会发生什么…我强烈建议您对
文件流
使用
指令,因为您目前将其保持打开状态。

知道这一点很好,但这并不能解决问题issue@SusiKette:您是否尝试过完全删除事物的UI端?如果使用
File.OpenRead
打开文件流,然后在那里调用
Image.FromStream
,会怎么样?这样行吗?文件的格式是什么?它是原始文件。那有关系吗?它应该仍然能够从文件中读取字节。我知道这个文件本身就是图像数据,因为我用手/手工做了一些转换,但是这个文件很大,所以转换器肯定会有帮助。现在,我只想让程序从输入数据中输出一个png文件,然后添加一些东西,以便在我有视觉输出帮助我进行转换时更接近我的目标。@SusiKette:是的,这绝对重要。您要求
Image
类将字节解释为图像-因此需要采用它知道的格式。如果“原始文件”的意思是没有标题信息等来解释格式,那将是一个问题。是否还有办法定义必要的信息?