首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WPF中将CMYK tif图像打印到CMYK pdf中会失去颜色。

在WPF中将CMYK tif图像打印到CMYK pdf中会失去颜色。
EN

Stack Overflow用户
提问于 2021-05-20 13:12:00
回答 1查看 149关注 0票数 0

我在CMYK中保存了一个tiff文件,我正在将该文件加载到WPF中的图像中。然后,我将图像添加到文档中,并使用Adobe打印驱动程序将其保存到CMYK中。PDF文档中的图像不像原始图像那么有活力。我已经尝试了PDF打印机的许多设置,但都没有效果。如果我将PDF保存在RGB颜色空间中,据我所知,颜色是完全保留的。或者,我可以从相同的CMYK映像中在Acrobat中创建一个CMYK文件,并且质量是完美的。

我的猜测是,在WPF中加载图像和打印图像之间,我得到了RGB像素,然后这些像素被转换回CMYK,丢失了原始的颜色信息,但我真的不知道。当加载位图图像时,我可以在调试器中看到格式是Cmyk32,所以可能是图像控件、页面或文档在通过XPS时以RGB格式呈现它。我看不出来。有人有什么想法吗?下面是我为显示问题而创建的代码示例。

代码语言:javascript
运行
复制
// select printer and get printer settings
PrintDialog printDialog = new PrintDialog();

if (printDialog.ShowDialog() != true)
{
    return;
}

LocalPrintServer ps = new LocalPrintServer();

// Get the default print queue
PrintQueue pq = ps.GetPrintQueue(printDialog.PrintQueue.FullName);

// create a document
FixedDocument document = new FixedDocument();
document.DocumentPaginator.PageSize = 
    new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);

// create a page
FixedPage page = new FixedPage
{
    Width = document.DocumentPaginator.PageSize.Width,
    Height = document.DocumentPaginator.PageSize.Height
};

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("testcmyk.tif", UriKind.RelativeOrAbsolute);
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bi.EndInit();

Image image = new Image
{
    Source = bi
};

page.Children.Add(image);

PageContent content = new PageContent
{
    Child = page
};

document.Pages.Add(content);

XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
xpsdw.Write(document, printDialog.PrintTicket);

我看到了一些关于在WPF中使用CMYK的其他问题,但我还没有找到确切的问题。我真的需要的CMYK提交到一个专业的印刷公司,但艺术作品正在失去颜色通过软件。当tiff文件也具有透明度时,问题会变得更糟(看起来更糟)。

编辑

在尝试了各种方法来跟踪问题发生的地方之后,我决定只保存XPS文件。在这样做的过程中,我发现一些令人沮丧的事情。下面是一个代码片段:

代码语言:javascript
运行
复制
using (FileStream stream = new FileStream("test.xps", FileMode.Create))
{
    Package package = Package.Open(stream, FileMode.Create);
    using (XpsDocument xpsDoc = new XpsDocument(package, System.IO.Packaging.CompressionOption.NotCompressed))
    {
        XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
        xpsdw.Write(image);
    }
}

我在这里传递的图像与第一个代码片段中的图像相同,只是为了看看XpsDocumentWriter将如何处理它。当我用7zip打开生成的.xps文件时,我发现原来的tiff文件不见了,并被转换为png!如果我正确地理解了打印系统,我的原始CMYK tiff文件永远不会到达pdf打印机,因为它通过XPS系统到达那里。有什么补救办法吗?有没有办法让XPS保留原来的图像?这个问题是否甚至在这个阶段之前就出现了?请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2021-06-03 15:32:15

如果它是您的选项,您可以考虑使用像LEADTOOLS成像SDK这样的成像工具包,它具有处理CMYK颜色空间的类。(免责声明:我是该工具包供应商的雇员)

该工具包有一个LoadCmykPlanes和SaveCmykPlanes方法,可用于将TIFF图像转换为CMYK,而不影响CMYK平面。

这方面的代码如下:

代码语言:javascript
运行
复制
// take CMYK data from file inputCmykTiff and save it as PDF into file outputCmykPdf
Leadtools.Codecs.RasterCodecs codecs = new RasterCodecs();
Leadtools.RasterImage imageWithPlanes = codecs.LoadCmykPlanes(inputCmykTiff, 0, 1);
codecs.SaveCmykPlanes(imageWithPlanes, outputCmykPdf, RasterImageFormat.RasPdfCmyk, 8, 1, CodecsSavePageMode.Overwrite);

由于结果将取决于您的输入图像,我建议使用自由评价进行测试,以确定这是否会产生良好的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67621030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档