繁体   English   中英

C#将单色图像(1bpp)转换为灰度图像(8bpp)

[英]C# convert monochrome image (1bpp) to grayscale one (8bpp)

我试图将图像从1bpp转换为8bpp:

    BitmapData dstData = dstImage.LockBits(
    new Rectangle(0, 0, dstImage.Width, dstImage.Height),
    ImageLockMode.ReadWrite, dstImage.PixelFormat);

    try
    {
    int width = srcData.Width;
    int height = srcData.Height;

    unsafe
    {
        byte* srcBase = (byte*)srcData.Scan0.ToPointer();
        byte* dstBase = (byte*)dstData.Scan0.ToPointer();
        int srcStride = srcData.Stride;
        int dstStride = dstData.Stride;

        for (int y = 0; y < height; y++)
        {
            ushort* src = (ushort*)(srcBase + y * srcStride);
            ushort* dst = (ushort*)(dstBase + y * dstStride);

            for (int x = 0; x < width; x++)
            {
                byte mask = (byte)(0x80 >> (x & 0x07));
                *dst = ((*src) & mask) != 0 ? (ushort)255 : (ushort)0;
                if (mask == 1)
                {
                    src++;
                }

                dst++;
            }
        }                   
    }
}
finally
{
    dstImage.UnlockBits(dstData);
}

新图像不是预期的灰度图像。 用于设置像素值的algho似乎是错误的。

var src = srcBase + y * srcStride; var dst = dstBase + y * dstStride;

                    for (int x = 0; x < width; x++, dst++)
                    {
                        byte mask = (byte)(0x80 >> (x & 0x07));
                        *dst = ((*src) & mask) != 0 ? (byte)255 : (byte)0;
                        if (mask == 1)
                        {
                            src++;
                        }
                    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM