Вот версия, использующая LockBits
.
Предполагается, что если оно не черное, измените его на белое.
- Это будет на порядок быстрее
GetPixel
и SetPixel
- Работает с необработанными данными в памяти с использованием указателей
- повторяется через каждый пиксель
- Проверяет цвет и при необходимости меняет его на белый
- Сохраняет изображение
Примечание : очевидно, что это уничтожит любое сглаживание и сглаживание, произойдет сбой для определенных типов изображений и других проблем.
using (var bmp = new Bitmap(@"D:\Test.png"))
{
var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb);
var white = Color.White.ToArgb();
var black = Color.Black.ToArgb();
try
{
var length = (int*)data.Scan0 + bmp.Height * bmp.Width;
for (var p = (int*)data.Scan0; p < length; p++)
if (*p != black) *p = white;
}
finally
{
// unlock the bitmap
bmp.UnlockBits(data);
bmp.Save(@"D:\Output.Bmp", ImageFormat.Bmp);
}
}
выход