剪贴板包含图片时将剪贴板转换为GIF / PNG

时间:2010-02-05 10:26:23

标签: clipboard-pictures

我想知道是否有人知道如何检测图片何时复制到剪贴板中,然后在发生时执行以下操作:

  • 将此图片转换为GIF / PNG
  • 然后将此压缩图片放回剪贴板

我问的原因是我们经常将粘贴截图复制到用户并将其粘贴到Lotus中。出于某种原因,直接粘贴Lotus中的图片会比使用GIF中的Paint保存粘贴更大的电子邮件,从GIF复制然后粘贴在Lotus中。

我猜想剪贴板不会存储像素本身,而是知道所采用数据格式的对象。

如果我错了,请随意纠正我!

编辑:

在阅读完第一个答案之后,我的问题是:“我每次将图片放在剪贴板中时,如何压缩并将其放回剪贴板?”

3 个答案:

答案 0 :(得分:1)

假设这是在Windows上,剪贴板stores the image采用非压缩格式。 GIF是一种压缩的图像文件格式,因此它进行压缩,这就是文件较小的原因。

答案 1 :(得分:0)

如果您只是在寻找Lotus Notes解决方案,则根据您运行的Lotus Notes版本,首选“压缩粘贴到文档中的图像”。我认为来自8.0版,但我可能错了。除此之外,我不知道你能用什么。

我刚刚测试了将屏幕截图粘贴到草稿电子邮件中,保存的草稿是124KB。将屏幕截图粘贴到Paint中并将其保存为GIF,这是一个163KB的文件。

答案 2 :(得分:0)

出于类似目的,我使用以下C#程序。它将剪贴板保存为PNG文件。然后我在Gmail或其他任何地方上传文件。

class Clip2Png {
[System.STAThread]
public static void Main(string[] args) {
    if (args.Length != 1) {
        System.Console.WriteLine("Usage: clip2png filename");
        return;
    }

    System.Windows.Forms.IDataObject lData = System.Windows.Forms.Clipboard.GetDataObject();
    if (lData == null || !lData.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap)) {
        System.Console.WriteLine("No image in clipboard");
        return;
    }

    System.Drawing.Image image = (System.Drawing.Image)
            lData.GetData(System.Windows.Forms.DataFormats.Bitmap, true);
    image.Save(args[0], System.Drawing.Imaging.ImageFormat.Png);
}
}