我正在做一个项目,其核心涉及向图像添加文本,例如,给定背景图像 (B) 和指定字体、点大小和字体 (A) 的一些文本,这两者被合成在一起以产生(C):
最终结果是使用这些图像进行打印,因此背景使用 CMYK 颜色空间,我需要将整个过程保持在 CMYK 内,否则打印时颜色看起来不对。(注:CodeProject 上关于色彩空间和 .NET 的优秀文章)
我尝试了几种不同的方式将这些图像合成在一起:
- System.Drawing 将所有内容隐式转换为 RGB
- System.Windows.Media.Imaging - 没有合成方法
- System.XAML/WPF - 非常有希望,但是 RenderTargetBitmap 在 PixelFormats.Cmyk32 中不起作用(引发 ArgumentException)。
我已经看过但没有尝试过第三方商业组件,因为价格似乎开始很高并继续上涨:
- 图形工厂(截至 2010 年 12 月约 1800 美元)
- Atalasoft DotImage(截至 2010 年 12 月约 3300 美元)
这在 .NET 4 中可行吗?
编辑:
因为其他人可能想做一些稍微不同的事情,只需将任何Windows.System.Media.Imaging
能够加载到 CMYK 的格式转换为我使用的代码:
var bitmapConverter = new FormatConvertedBitmap();
bitmapConverter.BeginInit();
bitmapConverter.Source = sourceImage;
bitmapConverter.DestinationFormat = PixelFormats.Cmyk32;
bitmapConverter.EndInit();
为了澄清上述代码将图像源转换为 CMYK32(无透明度),但是如果您使用某些类(即RenderTargetBitmap
传递上述 ImageSource 将引发异常)。