我正在使用此代码片段来加载各种图像文件:
BitmapImage bitmap = new BitmapImage ();
bitmap.BeginInit ();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit ();
这适用于存储为 RGB、RGB+Alpha 和 CMYK 的 TIFF 文件。但是,如果我尝试使用 CMYK 颜色和 Alpha 通道加载 TIFF 文件,则会出现异常(解码器无法将文件格式识别为有效)。
我之前使用的是FreeImage库和一个薄的 C# 包装器。FreeImage 3.x 部分支持这种图像格式,即我必须加载两次 TIFF,一次是不透明的 CMYK,一次是 RGB+Alpha;这个技巧是必要的,因为 FreeImage 最多只能同时访问 4 个颜色通道。
我想知道是否有支持加载 CMYK+Alpha 位图的方法?直接在 C# 中或通过一些互操作代码,但最好不必使用第三方 DLL(.NET 4 框架库除外)。
可以在此处找到此类 TIFF 文件的示例。
编辑:我无法再重现该问题,以下代码可以正常工作:
BitmapImage bitmap = new BitmapImage ();
bitmap.BeginInit ();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit ();
byte[] pixels = new byte[bitmap.PixelHeight*bitmap.PixelWidth*5];
bitmap.CopyPixels (pixels, bitmap.PixelWidth * 5, 0);
但是我仍然卡住了:我怎样才能发现源图像被编码为 CMYK 加 Alpha 通道?查看Format
属性时,我只得到图像每像素 40 位的信息。所有有趣的东西都存储在以下非公共属性中:
bitmap.Format.FormatFlags == IsCMYK | NChannelAlpha;
bitmap.Format.HasAlpha == true;
是否有任何官方方法可以在不诉诸反思的情况下找到它们?