我正在尝试创建一个将memorystream转换为png图像的代码,但是我在使用时遇到ArgumentException"参数不正确"错误(Image img = Image.FromStream(ms)).它没有进一步指定它,所以我不知道为什么我得到错误,我应该怎么做.
另外,如何将Width参数与img.Save(filename +".png",ImageFormat.Png)一起使用; ?我知道我可以添加参数并识别"Width",但我不知道它应该如何格式化,因此visual studio会接受它.
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()
{ …Run Code Online (Sandbox Code Playgroud) 代码的目的是将两个字节组合到ushort.所有变量都是ushort类型,但M_hi和M_lo都加载了一个字节.我最初只将它们作为字节,但是这个错误发生了,所以我尝试了ushort而不是第一部分掩盖了更高的字节.我最初尝试使用它来防止此错误,因为我认为编译器认为它可能会溢出.虽然它没有解决它,但我决定暂时保留它.然后它乘以0x100,有效地将其移动到较高字节的位置.最后将第二个值添加为低字节.
cv.M = ((cv.M_hi & 0x00FF) * 0x100) + cv.M_lo;
Run Code Online (Sandbox Code Playgroud)
这些值是从一个以小端存储数据的字节数组中读取的,所以我需要做这样的事情来组合它们以使用ushort值(不,我不能将整个数组转换为big-endian).
无论哪种方式,我知道我正在使用的算法应该可以工作,但是有一些东西会阻止它按原样工作.有没有其他方法可以做到这一点?我也试过检查ToInt16方法,但Unity似乎没有.