事实证明,为了将图像存储到剪贴板,图像会自动转换为几种格式(BMP、DIB等)的未压缩位图。所以当你有一个10MP的图像,它需要40MB的未压缩(8位RGBA),它可能需要200MB的内存来存储在剪贴板上,以防有人想要其他格式之一。
你所能做的就是把它放在剪贴板上,而不需要太多的开销。如果使用Reflector,则会看到剪贴板.SetImage如下所示:
public static void SetImage(Image image)
{
if (image == null)
{
throw new ArgumentNullException("image");
}
IDataObject data = new DataObject();
data.SetData(DataFormats.Bitmap, true, image); // true means autoconvert
Clipboard.SetDataObject(data, true); // true means copy
}
如果您使用一个或两个
true
实例设置为
false
,您可能能够克服一些不必要的复制,并能够将更大的图像放在剪贴板上。