我在 .NET Framework 4.8 Winforms 应用程序中使用 Magick.NET-Q8-AnyCPU v8.6.1 来添加对 System.Drawing 命名空间(例如 WebP)中不可用的图像类型的支持,并将图像转换为灰度。System.Drawing.Bitmap 图像有两个控制其内部结构的属性;像素格式和图像格式。
MagickImage.Format 很好地映射到 ImageFormat 属性,但我无法弄清楚如何在 MagickImage 转换属性和所需的 Bitmap.PixelFormat 属性之间进行映射。例如,将图像转换为 png 时,我正在使用:
using (var magickImage = new MagickImage("anImage.webp")) {
var ms = new MemoryStream();
magickImage.Write(ms, MagickFormat.Png);
Bitmap pngImage = new Bitmap(ms);
}
pngImage 有时会具有与“anImage”匹配的 PixelFormat,有时则不会。我无法预测或设置 pngImage 的 PixelFormat。如何强制使用magickImage.Write() 写入的图像的PixelFormat?
同样,要将 png 图像转换为灰度,我正在使用:
using (var magickImage = new MagickImage("anotherImage.png")) {
magickImage.Grayscale(PixelIntensityMethod.Brightness);
var ms = new MemoryStream();
magickImage.Write(ms, MagickFormat.Png);
Bitmap grayImage = new Bitmap(ms);
}
如果 magickImage.Format 是 Format.Gif,则 grayImage 的 PixelFormat 为 Format8bppIndexed,对于所有其他 magickImage 格式,则为 Format32bppArgb。如何更改代码以获取 PixelFormat.Format8bppIndexed 和 ImageFormat.Png?
一般来说,如何控制通过 Magick.NET 创建的图像的 PixelFormat?