1

我使用 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;
            }
        }    

图像保存一切正常,但是当我缩放图像然后打印它时,代码在“raster[i] = new byte[width, height];”行失败。引发系统内存不足错误。谁能帮我找到解决方案?

4

2 回答 2

2

我不确定是否有解决方案。您有 3 个数组,每个数组都需要一个连续的 163MB 内存块。问题将是该进程没有 3 个这样大小的可用地址块。

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

你唯一真正的希望是

  1. 使用应用程序 OOB,希望 VM 碎片会受到限制,并允许分配如此大的数组。
  2. 如果 FluxJpegCore 可以使用Stream而不是字节数组并且这样做很有效(仍然需要做很多工作)
  3. 升级到 Silverlight 5 并将您的应用程序托管在 64 位浏览器实例中。
于 2012-01-30T12:59:50.057 回答
0

与@AnthonyWJones 一起,我很确定宽度或高度类似于 double.NAN。确保您放置检查以查看宽度和高度是实数。还要检查您的阵列在 Silverlight 中是否超出了可能

于 2012-01-30T06:40:15.913 回答