【发布时间】:2023-03-19 01:34:01
【问题描述】:
有人知道如何使用 C# 正确识别 CMYK 图像吗?我找到了使用 ImageMagick 的方法,但我需要一个 .NET 解决方案。我在网上找到了 3 个代码 sn-ps,只有一个在 Windows 7 中有效,但在 Windows Server 2008 SP2 中都失败了。我需要它至少在 Windows Server 2008 SP2 中工作。这是我发现的:
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Drawing;
using System.Drawing.Imaging;
bool isCmyk;
// WPF
BitmapImage wpfImage = new BitmapImage(new Uri(imgFile));
// false in Win7 & WinServer08, wpfImage.Format = Bgr32
isCmyk = (wpfImage.Format == PixelFormats.Cmyk32);
// Using GDI+
Image img = Image.FromFile(file);
// false in Win7 & WinServer08
isCmyk = ((((ImageFlags)img.Flags) & ImageFlags.ColorSpaceCmyk) ==
ImageFlags.ColorSpaceCmyk);
// true in Win7, false in WinServer08 (img.PixelFormat = Format24bppRgb)
isCmyk = ((int)img.PixelFormat) == 8207;
【问题讨论】:
-
你的两个测试盒都是 x86 还是 x64?
-
两者都是 64 位机器。会不会是 GDI+ dll?
-
两种操作系统的
img.PixelFormat返回什么?wpfImage.Format怎么样? -
啊... GDI+。 .NET 既完全依赖又完全害怕的库。 System.Drawing 对 GDI+ 的依赖比 .NET 框架中的其他任何东西都更怪异、“内存不足”错误和莫名其妙的异常......
-
Gabe,我修改了代码 sn-p 以显示 wpfImage 和 img.PixelFormat 返回的内容