Написал алгоритм для изменения контрастности изображения, но выдает данную ошибку
Как можно исправить ошибку?
Код для программы
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.Drawing.Imaging;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
Bitmap newBitmap;
Image file;
Boolean opened = false;
float contrast = 0;
public Form1()
{
InitializeComponent();
}
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult dr = openFileDialog1.ShowDialog();
if (dr == DialogResult.OK) // Если в диалоге была нажата кнопка ОК
{
file = Image.FromFile(openFileDialog1.FileName);
pictureBox1.Image = new Bitmap(openFileDialog1.FileName); // Загружаем изображение
pictureBox1.Image = file;
opened = true;
}
}
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null) // Если изображение в picturebox1 есть
{
SaveFileDialog sfd = new SaveFileDialog(); // Диалог для выбора файлов
sfd.Filter = "Image Files (*.JPG;*.PNG) | *.JPG;*.PNG"; // Фильтр файлов
if (sfd.ShowDialog() == DialogResult.OK) // Если нажата кнопка ОК
{
pictureBox1.Image.Save(sfd.FileName); // Сохраняем изображение
}
}
}
private void оттенкиСерогоToolStripMenuItem_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
Bitmap input = new Bitmap(pictureBox1.Image); // Создаем Bitmap из изображения, который находится в pictureBox1
Bitmap output = new Bitmap(input.Width, input.Height); // Создаём Bitmap для черно-белого изображения
for (int j = 0; j < input.Height; j++)
for (int i = 0; i < input.Width; i++)
{
// Получаем (i,j) пиксель
UInt32 pixel = (UInt32)(input.GetPixel(i, j).ToArgb());
// Получаем компоненты цветов пикселя
float R = (float)((pixel & 0x00FF0000) >> 16);
float G = (float)((pixel & 0x0000FF00) >> 8);
float B = (float)((pixel & 0x000000FF));
// Делаем цвет черно-белым (оттенок серого) - находим их среднее арифметическое
R = G = B = (R + G + B) / 3.0f;
// Собираем новый пиксель по частям
UInt32 newPixel = 0xFF000000 | ((UInt32)R << 16) | ((UInt32)G << 8) | ((UInt32)B);
// Добавляем его в Bitmap нового изображения
output.SetPixel(i, j, Color.FromArgb((int)newPixel));
}
// Выводим черно-белое изображение из Bitmap в PictureBox1
pictureBox1.Image = output;
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
label3.Text = trackBar1.Value.ToString();
int r, g, b;
var image = new PictureBox();
var loadImage = new Bitmap(pictureBox1.Image);
var WidthHeightImage = new Bitmap(loadImage.Width, loadImage.Height);
for (int j = 0; j < loadImage.Height; j++)
for (int i = 0; i < loadImage.Width; i++)
{
Color pixel = loadImage.GetPixel(i, j);
r = pixel.R + trackBar1.Value;
if (r > 255) r = 255; if (r < 0) r = 0;
g = pixel.G + trackBar1.Value;
if (g > 255) g = 255; if (g < 0) g = 0;
b = pixel.B + trackBar1.Value;
if (b > 255) b = 255; if (b < 0) b = 0;
Color res = Color.FromArgb(r, g, b);
WidthHeightImage.SetPixel(i, j, res);
}
pictureBox1.Image = WidthHeightImage;
image.Image = WidthHeightImage;
}
private void trackBar2_Scroll(object sender, EventArgs e)
{
label4.Text = trackBar2.Value.ToString();
contrast = 0.04f * trackBar2.Value;
Bitmap bm = new Bitmap(newBitmap.Width, newBitmap.Height);
Graphics g = Graphics.FromImage(bm);
ImageAttributes ia = new ImageAttributes();
ColorMatrix cm = new ColorMatrix(new float[][]{
new float[]{contrast,0f,0f,0f,0f },
new float[]{0f,contrast,0f,0f,0f },
new float[]{0f,0f,contrast,0f,0f },
new float[]{0f,0f,0f,1f,0f },
new float[]{0.001f,0.001f,0.001f,0f,1f}});
ia.SetColorMatrix(cm);
g.DrawImage(newBitmap, new Rectangle(0, 0, newBitmap.Width, newBitmap.Height), 0, 0, newBitmap.Width, newBitmap.Height,GraphicsUnit.Pixel,ia);
g.Dispose();
ia.Dispose();
pictureBox1.Image = bm;
}
}
}

Bitmap newBitmap;ты нигде не придаешь значения данной переменой, вот она у тебя и null. Мб ты хотел забыл инициализировать еёBitmap newBitmap = new Bitmap(500,500)? – Megaluk May 25 '21 at 17:10bmуказывая ширину и высоту пустого newBitmap который не был инициализирован . – Megaluk May 25 '21 at 17:15