我想更改图像中的像素,范围在140到180之间。所以我使用了以下代码。但它只保存原始图像,而不是保存原始图像。请帮我将140到180之间的图像像素转换为0(黑色)。在我的代码下面:
public void convertImage(string imag)//some file path
{
using (Bitmap image = new System.Drawing.Bitmap(imag))
{
BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr ptr = data.Scan0;
int size = data.Stride * image.Height;
byte[] bytes = new byte[size];
Marshal.Copy(ptr, bytes, 0, bytes.Length);
for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
if (
(140 < bytes[(y * data.Stride) + (x * 3) + 2]) && (180 > bytes[(y * data.Stride) + (x * 3) + 2]) &&
(140 < bytes[(y * data.Stride) + (x * 3) + 1]) && (180 > bytes[(y * data.Stride) + (x * 3) + 1]) &&
(140 < bytes[(y * data.Stride) + x * 3]) && (180 > bytes[(y * data.Stride) + x * 3])
)
{
bytes[(y * data.Stride) + (x * 3) + 2] = (int)0;
bytes[(y * data.Stride) + (x * 3) + 1] = (int)0;
bytes[(y * data.Stride) + x * 3] = (int)0;
}
}
}
Marshal.Copy(bytes, 0, ptr, bytes.Length);
image.UnlockBits(data);
image.Save("sys.bmp", ImageFormat.Bmp);
image.Dispose();
}
}
这里我假设我的图像在每种颜色的140到180之间具有灰色像素。请帮帮我。
答案 0 :(得分:2)
将ImageLockMode替换为 ReadWrite ,而不是 ReadOnly 。
BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);