C# “例外情况”;参数不正确";
我试图编写一个将memorystream转换为png图像的代码,但在使用(image img=image.FromStream(ms))时遇到ArgumentException“参数不正确”错误。它没有进一步指定它,所以我不知道为什么会出现错误,我应该怎么做 另外,如何将宽度参数与img.Save(filename+“.png”,ImageFormat.png)一起使用;?我知道我可以添加参数,它可以识别“宽度”,但我不知道它应该如何格式化,以便VisualStudio接受它C# “例外情况”;参数不正确";,c#,C#,我试图编写一个将memorystream转换为png图像的代码,但在使用(image img=image.FromStream(ms))时遇到ArgumentException“参数不正确”错误。它没有进一步指定它,所以我不知道为什么会出现错误,我应该怎么做 另外,如何将宽度参数与img.Save(filename+“.png”,ImageFormat.png)一起使用;?我知道我可以添加参数,它可以识别“宽度”,但我不知道它应该如何格式化,以便VisualStudio接受它 using Sys
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
类将字节解释为图像-因此需要采用它知道的格式。如果“原始文件”的意思是没有标题信息等来解释格式,那将是一个问题。是否还有办法定义必要的信息?