【问题标题】:Exporting an Image from a WinForms application to PowerPoint with transparency以透明方式将图像从 WinForms 应用程序导出到 PowerPoint
【发布时间】:2011-03-27 23:38:43
【问题描述】:

我在将应用程序中的图像粘贴到 PowerPoint 中同时保持透明度时遇到了问题。我将图像存储为System.Drawing.Graphics 类型,然后将其转换为System.Drawing.Bitmap 类型并复制到剪贴板。在此过程中,我还使用了Bitmap.MakeTransparent(Color.Black),以便在粘贴图像时原始文档中的所有黑色内容都是透明的。

if (GraphicsInterface.getGraphics() != null)
{
    Image image = GraphicsInterface.getGraphics();
    Bitmap bitmap = new Bitmap(image);
    bitmap.MakeTransparent(Color.Black);
    Clipboard.SetImage(bitmap);
}

但是,当我尝试将图像粘贴到 PowerPoint 等应用程序中时,原本黑色的所有内容现在都变成了非常浅的灰色,而不是透明的。

我的方法正确吗?有没有办法协调 .net 和 PowerPoint 中的透明值?还是将图像插入 PowerPoint 后必须手动完成透明度?

【问题讨论】:

  • 您使用“C# 和 .NET”这一事实在很大程度上与您的问题无关。重要的是您使用的是 Windows 窗体。
  • @John:我明白为什么 C# 无关紧要,但为什么 Windows 窗体比 .NET 更相关?我对 Windows 开发很陌生,我很好奇为什么会这样
  • 如果您使用System.Drawing,Windows 会将其形成为您正在使用的 .NET 子集。与整个 .NET 相比,它只是一个很小的子集。

标签: c# winforms transparency powerpoint clipboard


【解决方案1】:

我能够通过加载具有透明度的已知良好文件来重现此问题。我搜索了一下,终于想出了一些东西,可以将图像以透明的方式放到剪贴板上,然后我成功地将其粘贴到 PowerPoint 2007 中。

您可能仍需要对MakeTransparent() 操作进行一些操作,但这应该可以帮助您入门。另外,不要忘记正确处理图像。为了清楚起见,我省略了using 语句。

Image image = Image.FromFile(@".\Star.png");
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Png);
DataObject data = new DataObject("PNG", stream);
Clipboard.SetDataObject(data, true);

【讨论】:

  • 请注意,“PNG”格式仅受 Microsoft Office 支持。
  • 谢谢,@AMissico。您的意思是说其他类似办公室的产品,例如 OOo.org,不会接受以这种方式添加到剪贴板的图像吗? (我无法在办公室确认。)
  • @kbrmington:(参考stackoverflow.com/questions/2799442/…。)根据我的实验,我相信“PNG”剪贴板格式是Microsoft Office实现的自定义格式。我认为这是解决我的问题的方法,但发现它只适用于 Microsoft Office 应用程序。我能够使用 Office 2003 和 Office 2007 进行测试。我还使用计算机上的所有图形应用程序进行了测试,但它们都不理解格式。我在测试时使用“剪贴板查看器”来监控剪贴板。
  • @AMissico:谢谢。我打算对此进行一些思考。你在粘贴什么?
  • @kbrimington:我通常使用 Paint Shop Pro 9。然而,我试图让图像粘贴到任何东西中。我认为一个很好的测试应用程序是 Paint.NET,因为它是免费的。
猜你喜欢
  • 1970-01-01
  • 2012-07-01
  • 2021-03-16
  • 1970-01-01
  • 2010-09-28
  • 2017-03-04
  • 1970-01-01
  • 2018-11-14
相关资源
最近更新 更多