gpt4 book ai didi

带有 CMYK + Alpha 的 WPF BitmapImage 和 TIFF

转载 作者:行者123 更新时间:2023-12-03 17:59:52 24 4
gpt4 key购买 nike

我正在使用此代码片段来加载各种图像文件:

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 channel 加载 TIFF 文件,则会出现异常(解码器无法将文件格式识别为有效)。

我之前使用的是 FreeImage库和一个薄的 C# 包装器。 FreeImage 3.x 部分支持这种图像格式,即我必须加载 TIFF 两次,一次是没有透明度的 CMYK,一次是 RGB+Alpha;这个技巧是必要的,因为 FreeImage 最多只能同时访问 4 个颜色 channel 。

我想知道是否有支持加载 CMYK+Alpha 位图的方法?直接在 C# 中或通过一些互操作代码,但最好不必使用第三方 DLL(.NET 4 框架库除外)。

可以找到此类 TIFF 文件的示例 here .

编辑 :我无法再重现该问题,以下代码可以正常工作:
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 channel ?当查看 Format属性,我只得到图像每像素 40 位的信息。所有有趣的东西都存储在以下非公共(public)属性中:
bitmap.Format.FormatFlags == IsCMYK | NChannelAlpha;
bitmap.Format.HasAlpha == true;

是否有任何官方方法可以在不诉诸反射(reflection)的情况下找到它们?

最佳答案

我只能这样说,因为我遇到了一些文件的问题:首先将 tiff 转换为 png24 然后加载它可能是一种更好的方法。

如果用户尝试保存 CMYK Tiff 文件并勾选“透明度”,即使 Photoshop 也会发出警告:“许多程序不支持 TIFF 中的透明度。保存透明度信息?”

因此,在打开之前转换可能是安全的方法。

也许 http://msdn.microsoft.com/en-us/library/system.drawing.imageconverter.aspx会这样做,但我怀疑,你可能需要一些额外的管道。

HTH。

关于带有 CMYK + Alpha 的 WPF BitmapImage 和 TIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4068801/

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