将画布打印到图像silverlight

将画布打印到图像silverlight,silverlight,printing,bitmap,raster,Silverlight,Printing,Bitmap,Raster,我使用WritebleBitmap类成功地将画布添加到位图中,然后尝试使用位图通过SaveFileDilogue在客户端系统上保存图像。我使用的是FluxJpegCore图像编码方法,我们使用光栅阵列生成像素级图像。 下面是执行此任务的代码部分 byte[][,] raster = new byte[bands][,]; for (int i = 0; i < bands; i++) { raster[i] = ne

我使用WritebleBitmap类成功地将画布添加到位图中,然后尝试使用位图通过SaveFileDilogue在客户端系统上保存图像。我使用的是FluxJpegCore图像编码方法,我们使用光栅阵列生成像素级图像。 下面是执行此任务的代码部分

        byte[][,] raster = new byte[bands][,];

        for (int i = 0; i < bands; i++)
        {
            raster[i] = new byte[width, height];
        }

        for (int row = 0; row < height; row++)
        {
            for (int column = 0; column < width; column++)
            {
                int pixel = bitmap.Pixels[width * row + column];
                raster[0][column, row] = (byte)(pixel >> 16);
                raster[1][column, row] = (byte)(pixel >> 8);
                raster[2][column, row] = (byte)pixel;
            }
        }    
byte[][,]光栅=新字节[带][,];
对于(int i=0;i>16);
光栅[1][列,行]=(字节)(像素>>8);
光栅[2][列、行]=(字节)像素;
}
}    

图像保存一切正常,但是当我缩放图像并打印它时,代码在“光栅[i]=新字节[width,height];”行失败。引发系统内存不足错误。有人能帮我找到解决办法吗?

使用@AnthonyWJones我很确定宽度或高度类似于double.NAN。确保您放置了一个检查,以查看宽度和高度是否为实数。还要检查您的阵列在Silverlight中的性能是否超出了可能的范围,我不确定是否有解决方案。您有3个阵列,每个阵列都需要一个连续的163MB内存块。问题是进程没有3个这样大小的地址块

还要记住,
bitmap.Pixels
将是一个653MB大的数组

你唯一真正的希望是

  • 使用应用程序OOB,希望VM碎片将受到限制,并允许分配如此大的阵列
  • 如果FluxJpegCore可以使用
    ,而不是字节数组,并且这样做非常有效(仍然有很多工作要做)
  • 移动到Silverlight 5并在64位浏览器实例中托管您的应用程序

  • 当它失败时,宽度和高度的值是什么?值是width=“3687”和height=“44278”不,它们在任何情况下都不是NAN。谢谢你的帮助!是否有其他方法可用于打印大型图像?我有scrollviewer,上面有大的图像内容。我将其转换为stackpanel,然后从中生成writeablebitmap。有时,此过程只会产生内存不足错误。