首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#将单色图像(1bpp)转换为灰度图像(8bpp)。

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

Stack Overflow用户
提问于 2019-05-27 18:47:29
回答 1查看 119关注 0票数 0

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

代码语言:javascript
复制
    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似乎是错误的。

EN

回答 1

Stack Overflow用户

发布于 2019-05-27 20:09:10

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

代码语言:javascript
复制
                    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++;
                        }
                    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56331091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档