Если вам нужно изменить изображение Pixel by Pixel, вернитесь к использованию свойства Image.Data.
Если вы используете цветные изображения, важно отметить, что это трехмерный массив, содержащий данные Red, Green и Blue в слое 0,1,2 соответственно. Следующий код позволит вам получить доступ к данным с изображения и настроить его.
for (int i = 0; i < width1; i++)
{
for (int j = 0; j < height1; j++)
{
img1.Data[i,j,0] = img1.Data[i,j,0] + img2.Data[i,j,0];
img1.Data[i,j,1] = img1.Data[i,j,1] + img2.Data[i,j,1];
img1.Data[i,j,2] = img1.Data[i,j,2] + img2.Data[i,j,2];
}
}
При ошибке преобразования байтов int <> вам может потребоваться привести результаты к (байту) (однако вы можете назначить int для данных, предоставленных в диапазоне), т.е.
img1.Data[i,j,0] = (byte)img1.Data[i,j,0] + img2.Data[i,j,0];
это сделано для того, чтобы сообщить .Net, что вы готовы принять потерю данных. Обратите внимание, что вы добавляете два байта из данных изображения. Там значения 0-255, так что вы можете получить значение 0-510. Чтобы учесть это, вы должны нормализовать свои результаты к требуемому стандарту 0 - 255 в изображениях. т.е.
img1.Data[i,j,0] = ((img1.Data[i,j,0] + img2.Data[i,j,2])/0);
Поскольку вы используете изображения в оттенках серого, у данных изображения будет только 1 слой, код схож по формату, однако вы добавляете только первый слой 0.
for (int i = 0; i < width1; i++)
{
for (int j = 0; j < height1; j++)
{
gray_image1.Data[i,j,0] = gray_image1.Data[i,j,0] + gray_image2.Data[i,j,0];
}
}
Свойство TDepth позволяет вам изменять тип данных, хранящихся в конструкции .Data, в то время как некоторые преобразования не поддерживаются, имеют значение типа double, в основном потому, что способ их хранения позволяет более эффективно выполнять код с ними. Хорошей практикой является использование этого, однако это не очень важно.