1

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

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

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

我猜剪贴板本身并不存储像素,而是一个知道所取数据格式的对象。

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

编辑:

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

4

3 回答 3

1

假设这是在 Windows 上,剪贴板以非压缩形式存储图像。GIF 是一种压缩的图像文件格式,因此它会进行压缩,这就是文件更小的原因。

于 2010-02-05T10:47:25.530 回答
0

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

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

于 2010-02-05T21:20:14.363 回答
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);
}
}
于 2010-02-05T21:28:26.577 回答