Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Clipboard.SetImage with WPF canvas为大图像保留剪贴板空白_C#_.net_Wpf_Canvas - Fatal编程技术网

C# Clipboard.SetImage with WPF canvas为大图像保留剪贴板空白

C# Clipboard.SetImage with WPF canvas为大图像保留剪贴板空白,c#,.net,wpf,canvas,C#,.net,Wpf,Canvas,我正在将WPF画布渲染到图像并将其粘贴到剪贴板上 如果画布很小(

我正在将WPF画布渲染到图像并将其粘贴到剪贴板上

如果画布很小(<900px正方形),则一切正常

我有一个更大的画布(3000+px正方形),剪贴板是空的(在photoshop/word等中禁用粘贴选项)

我还没有发现是否有一个阈值大小,导致这一突破

3140x1903不起作用,3140x317起作用

发生什么事了


感谢

事实证明,为了将图像存储到剪贴板,图像会自动转换为几种格式(BMP、DIB等)的未压缩位图。因此,当你有一个10MP的图像需要40MB的未压缩(8位RGBA)时,它可能需要200MB的内存才能存储在剪贴板上——以防有人需要其他格式的图像

你可以自己把它放到剪贴板上,而不需要那么多开销。如果使用Reflector,您将看到Clipboard.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
,则您可以制作自己版本的SetImage函数,从而克服一些不必要的复制,并能够将较大的图像放在剪贴板上。

事实证明,为了将图像存储到剪贴板,图像自动转换为多种格式(BMP、DIB等)的未压缩位图。因此,当你有一个10MP的图像需要40MB的未压缩(8位RGBA)时,它可能需要200MB的内存才能存储在剪贴板上——以防有人需要其他格式的图像

你可以自己把它放到剪贴板上,而不需要那么多开销。如果使用Reflector,您将看到Clipboard.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
,则您可以制作自己版本的SetImage函数,从而克服一些不必要的复制,并将较大的图像放在剪贴板上