C# 将图像从WinForms应用程序导出到具有透明度的PowerPoint

C# 将图像从WinForms应用程序导出到具有透明度的PowerPoint,c#,winforms,transparency,powerpoint,clipboard,C#,Winforms,Transparency,Powerpoint,Clipboard,我在将应用程序中的图像粘贴到PowerPoint中时遇到了问题,同时无法保持透明度。我将图像存储为System.Drawing.Graphics类型,然后将其转换为System.Drawing.Bitmap类型并复制到剪贴板。在这个过程中,我还使用了Bitmap.MakeTransparent(Color.Black),这样在粘贴图像时,原始文档中黑色的所有内容都将是透明的 if (GraphicsInterface.getGraphics() != null) { Image imag

我在将应用程序中的图像粘贴到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后,必须手动执行透明度操作吗?

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

您可能仍然需要使用
MakeTransparent()
操作,但这应该可以让您开始。另外,不要忘记正确处理图像。为了清晰起见,我省略了使用语句的

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);

我能够通过加载一个透明的已知良好文件来重现这个问题。我四处搜索了一下,终于找到了一些东西,可以将图像透明地粘贴到剪贴板上,然后成功地粘贴到PowerPoint 2007中

您可能仍然需要使用
MakeTransparent()
操作,但这应该可以让您开始。另外,不要忘记正确处理图像。为了清晰起见,我省略了使用
语句的

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);

事实上,您使用的是“C#and.NET”,这与您的问题基本无关。重要的是你使用的是Windows窗体。@约翰:我理解为什么C#不相关,但为什么Windows窗体比.NET更相关?我对Windows开发相当陌生,我很好奇,如果您使用的是
System.Drawing
,为什么isWindows会将其作为.NET的子集。与整个.NET相比,它只是一个很小的子集。您使用“C#and.NET”这一事实与您的问题基本无关。重要的是你使用的是Windows窗体。@约翰:我理解为什么C#不相关,但为什么Windows窗体比.NET更相关?我对Windows开发相当陌生,我很好奇,如果您使用的是
System.Drawing
,为什么isWindows会将其作为.NET的子集。与整个.NET相比,它只是一个很小的子集。请注意,“PNG”格式仅受Microsoft Office支持。谢谢,@AMissico。您的意思是其他类似office的产品,如OOo.org,将不接受以这种方式添加到剪贴板的图像吗?(我无法在办公室确认。)@kbrmington:(参见以供参考。)根据我的实验,我相信“PNG”剪贴板格式是由Microsoft office实现的自定义格式。我以为这是我问题的解决方案,但发现它只适用于Microsoft Office应用程序。我能够用Office2003和Office2007进行测试。我也在我的电脑上测试了所有的图形应用程序,他们都不懂格式。测试时,我使用“剪贴板查看器”监视剪贴板。@Amissio:谢谢。我要好好考虑一下。你在粘贴什么?@kbrimington:我通常使用油漆店Pro 9。然而,我试图让图像粘贴到任何东西。我认为测试的好应用程序应该是Paint.NET,因为它是免费的。请注意,“PNG”格式仅受Microsoft Office支持。谢谢,@AMissico。您的意思是其他类似office的产品,如OOo.org,将不接受以这种方式添加到剪贴板的图像吗?(我无法在办公室确认。)@kbrmington:(参见以供参考。)根据我的实验,我相信“PNG”剪贴板格式是由Microsoft office实现的自定义格式。我以为这是我问题的解决方案,但发现它只适用于Microsoft Office应用程序。我能够用Office2003和Office2007进行测试。我也在我的电脑上测试了所有的图形应用程序,他们都不懂格式。测试时,我使用“剪贴板查看器”监视剪贴板。@Amissio:谢谢。我要好好考虑一下。你在粘贴什么?@kbrimington:我通常使用油漆店Pro 9。然而,我试图让图像粘贴到任何东西。我认为一个很好的测试应用程序应该是Paint.NET,因为它是免费的。