gpt4 book ai didi

c# - 如何在 Magick.NET 中创建 8 bpp BMP?

转载 作者:行者123 更新时间:2023-12-02 03:51:55 27 4
gpt4 key购买 nike

使用 Magick.NET-Q8-AnyCPU。我想将现有 TIFF 图像转换为灰度 8 bpp BMP 图像。我试过这个:

byte[] input = <existing TIFF image>;
using (var image = new MagickImage(input))
{
image.Grayscale();
image.ColorType = ColorType.Palette;
image.Depth = 8;
image.Quantize(new QuantizeSettings() { Colors = 256, DitherMethod = DitherMethod.No });

byte[] result = image.ToByteArray(MagickFormat.Bmp);

return result;
}

在 FastStone Viewer 中,图像报告为 8 位,但是在文件“属性”>“详细信息”中,图像报告为“位深度:32”。我在这里需要将其设置为 8。我可以在 Paint.NET 中转换此图像,当我选择位深度:8 位时,新图像将在文件属性中正确显示 8 位深度。

因此,Paint.NET 创建了正确的 8 位位图。如何使用 Magick.NET 做到这一点?

最佳答案

Windows 资源管理器将所有压缩 BMP 文件显示为 32 位,这与其实际位深度相反。

我不知道这是否是一个错误,但我更接近称其为错误。

因为;使用代码创建 8bpp BMP 文件后,当我使用二进制编辑器打开该文件时,在位图 header 结构中,我看到每像素位数字段值( block 28-29)为 8 ,如下所示一定是。另外,下一个字节01(偏移量30)意味着用Run-length encoding压缩的数据。这是一种简单的无损数据压缩算法。

8bpp bmp hex

因此,我可以说你用Magick.NET生成的图像没有问题,它肯定是8bpp BMP图像文件,但经过压缩。

与 Magick.NET 的默认设置不同,Paint.NET 似乎生成未压缩的 BMP 文件,这就是为什么由于 Windows 资源管理器的怪异而导致您看到不同位深度的原因。

要解决此问题,您可以禁用压缩,以便属性对话框中显示的位深度值将是您期望的值。

image.Settings.Compression = CompressionMethod.NoCompression;
byte[] result = image.ToByteArray(MagickFormat.Bmp);

关于c# - 如何在 Magick.NET 中创建 8 bpp BMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58026373/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com