5

I need to take a screenshot of part of the screen and check if the screenshot is equal to the image in pictureBox2.

This is the line that doesn't work:

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

The error is

Value cannot be null.
Parameter name: encoder

enter image description here

My code appears below:

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

    }
}

What can I do?

Nico
  • 12,493
  • 5
  • 42
  • 62
Maiky Ganon
  • 51
  • 1
  • 1
  • 2

1 Answers1

17

Your image exists in memory and therefore doesn't have an encoder set for RawFormat. Specify a format like System.Drawing.Imaging.ImageFormat.Png or something.

sraboy
  • 903
  • 2
  • 13
  • 26