[英]C# convert monochrome image (1bpp) to grayscale one (8bpp)
I've tried to convert an image from 1bpp to 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);
}
The new image is not the expected gray-scale one. 新图像不是预期的灰度图像。 The algho for setting the pixel value seems to be wrong. 用于设置像素值的algho似乎是错误的。
var src = srcBase + y * srcStride; var src = srcBase + y * srcStride; var dst = dstBase + y * dstStride; 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.