在c#

时间:2017-05-22 13:59:01

标签: c# wpf vb.net windows-forms-designer

我想更改图像中的像素,范围在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之间具有灰色像素。请帮帮我。

1 个答案:

答案 0 :(得分:2)

将ImageLockMode替换为 ReadWrite ,而不是 ReadOnly

BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);