我已经使用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];”行中失败。引发系统内存不足错误。任何人都可以帮我找到解决方案吗?
答案 0 :(得分:2)
我不确定是否有解决方案。你有3个阵列,每个阵列需要一个连续的163MB内存块。问题是该过程没有3个这样大小的地址块。
还要记住bitmap.Pixels
将是一个653MB大的数组。
你唯一真正的希望是
Stream
而不是字节数组而且效果很好(还有很多工作需要你去做)答案 1 :(得分:0)
和@AnthonyWJones一起去,我很确定宽度或高度就像是double.NAN。请务必检查宽度和高度是否为实数。另外,在Silverlight
中检查您的阵列是否超出可能性