打印画布以成像silverlight

时间:2012-01-29 13:40:07

标签: silverlight printing bitmap raster

我已经使用WritebleBitmap类将canvas添加到位图,然后尝试使用位图通过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;
            }
        }    

一切都可以保存图像,但是当我缩放图像然后打印时,代码会在“raster [i] = new byte [width,height];”行中失败。引发系统内存不足错误。任何人都可以帮我找到解决方案吗?

2 个答案:

答案 0 :(得分:2)

我不确定是否有解决方案。你有3个阵列,每个阵列需要一个连续的163MB内存块。问题是该过程没有3个这样大小的地址块。

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

你唯一真正的希望是

  1. 使用应用程序OOB,希望VM碎片受到限制,并允许分配如此大的数组。
  2. 如果FluxJpegCore可以使用Stream而不是字节数组而且效果很好(还有很多工作需要你去做)
  3. 升级到Silverlight 5并在64位浏览器实例中托管您的应用。

答案 1 :(得分:0)

和@AnthonyWJones一起去,我很确定宽度或高度就像是double.NAN。请务必检查宽度和高度是否为实数。另外,在Silverlight

中检查您的阵列是否超出可能性