值不能为空。参数名称:编码器[重复]

Posted

技术标签:

【中文标题】值不能为空。参数名称:编码器[重复]【英文标题】:Value cannot be null. Parameter name: encoder [duplicate] 【发布时间】:2015-06-04 17:06:47 【问题描述】:

我需要对屏幕的一部分进行截图,并检查截图是否与pictureBox2中的图像相同。

这是行不通的行:

pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);

错误是

值不能为空。 参数名称:编码器

我的代码如下所示:

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

namespace WindowsFormsApplication1

    public partial class Form1 : Form
    
        Bitmap screenshot = new Bitmap(SystemInformation.VirtualScreen.Width,
            SystemInformation.VirtualScreen.Height,
            PixelFormat.Format32bppArgb);
        public Form1()
        
            InitializeComponent();

        



        private void Form1_Load(object sender, EventArgs e)
        

        

        private void timer1_Tick(object sender, EventArgs e)
        
            Bitmap screenshot = new Bitmap(SystemInformation.VirtualScreen.Width,
                SystemInformation.VirtualScreen.Height,
                PixelFormat.Format32bppArgb);
            Graphics screenGraph = Graphics.FromImage(screenshot);
            screenGraph.CopyFromScreen(
                SystemInformation.VirtualScreen.X + 1080,
                SystemInformation.VirtualScreen.Y + 100,
                0,
                0,
                new Size(190, 480),//SystemInformation.VirtualScreen.Size,
                CopyPixelOperation.SourceCopy);
            pictureBox1.Image = screenshot;
            MemoryStream ms = new MemoryStream();
            pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
            String image_one = Convert.ToBase64String(ms.ToArray());
            ms.Position = 0;
            pictureBox2.Image.Save(ms, pictureBox2.Image.RawFormat);
            String image_three = Convert.ToBase64String(ms.ToArray());
            ms.Position = 0;
            ms.Close();
            if (image_one.Equals(image_three))
                textBox1.Text = "SAME";
            else
                textBox1.Text = "DIFFERENT";
        

    

我能做什么?

【问题讨论】:

pictureBox1.Image @MajkeloDev 会导致 NRE 而不是 ArgumentNullException 调试你的代码,看看到底什么是空的,应该不是问题。此外,您可能希望将 MemoryStream 打包到 using 语句中: using(MemoryStream ms = new MemoryStream()) 在右括号末尾,MemoryStream 将自动处理。 @Maiky Ganon - 将此行放入 Try Catch 块并向我们展示堆栈跟踪 @HimBromBeere 你是对的。 【参考方案1】:

您的图像存在于内存中,因此没有为 RawFormat 设置编码器。指定 System.Drawing.Imaging.ImageFormat.Png 之类的格式。

【讨论】:

以上是关于值不能为空。参数名称:编码器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

System.ArgumentNullException: '值不能为空。参数名称:输入'Xamarin?

值不能为空。参数名称:httpContext

值不能为空。参数名称:starter中的connectionString appsettings.json

值不能为空。参数名称:dest

使用 DAL2 访问数据:值不能为空。参数名称:con

值不能为空。参数名称:routeCollection + ApiController