С вашим исходным изображением у вас есть 24-битное изображение.Когда вы выполняете усреднение цвета, вы записываете обратно в буфер изображения со следующим кодом:
pixels[currentLine + x] = (byte)NewC;
pixels[currentLine + x + 1] = (byte)NewC;
pixels[currentLine + x + 2] = (byte)NewC;
Вы снова записываете 24 бита.
Например, если ваши исходные значения дляRGB были (202, 203, 249), затем NewC был бы 218, а затем вы устанавливаете пороговое значение обратно на 255, поэтому вы записываете обратно (255,255,255), которое по-прежнему является значением RGB, оно только для белого.Затем вы сохраняете это изображение, используя
processedBitmap.Save("G:\\aaa.bmp", ImageFormat.Bmp);
. Класс ImageFormat просто устанавливает тип изображения, такой как jpeg, png и т. Д. И, как вы обнаружили, у вас по-прежнему выводится 24-битное изображение.
Итак, вы хотите сохранить изображение в виде чистого черно-белого изображения размером 1 бит на пиксель.Для этого вам нужно указать PixelFormat изображения, которое вы сохраняете, и, в частности, вы хотите PixelFormat Format1bppIndexed.
Если вы вместо этого измените соответствующий бит вашего кода на:
...
Marshal.Copy(pixels, 0, ptrFirstPixel, pixels.Length);
processedBitmap.UnlockBits(bitmapData);
Bitmap clone = processedBitmap.Clone(new Rectangle(0, 0, processedBitmap.Width, processedBitmap.Height), PixelFormat.Format1bppIndexed);
clone.Save("G:\\aaa.bmp", ImageFormat.Bmp);
MessageBox.Show("Success!");
Теперь ваш выходной клон будет изображением размером 1 бит на дюйм.
Однако вы можете еще больше упростить свой код, потому что эта функция клона может фактически сделать всю работу за вас, и вы можетеуменьшите ваш код до следующего:
Bitmap processedBitmap = new Bitmap(@"G:\0001.jpg");
Bitmap clone = processedBitmap.Clone(new Rectangle(0, 0, processedBitmap.Width, processedBitmap.Height), PixelFormat.Format1bppIndexed);
clone.Save("G:\\aaa.bmp", ImageFormat.Bmp);
MessageBox.Show("Success!");
Имейте в виду, что вывод немного отличается.Вот несколько тестовых примеров вывода.
Это мое входное изображение:
Вывод изображения с вашим пороговым кодом:
И вывод изображения с использованием только метода клонирования: