C# 通用GDI+;保存图像时出错

C# 通用GDI+;保存图像时出错,c#,bitmap,png,gdi+,C#,Bitmap,Png,Gdi+,我有以下代码: static void Main(string[] args) { const int SAMPLE_SIZE = 256 * 256; float[] samples = new float[SAMPLE_SIZE]; using (Bitmap bmp = new Bitmap(SAMPLE_SIZE, 1)) { for (int i = 0; i < samples.Length; ++i) {

我有以下代码:

static void Main(string[] args)
{
    const int SAMPLE_SIZE = 256 * 256;
    float[] samples = new float[SAMPLE_SIZE];
    using (Bitmap bmp = new Bitmap(SAMPLE_SIZE, 1))
    {
        for (int i = 0; i < samples.Length; ++i)
        {
            int c = (int)(samples[i] * 127 + 128);
            bmp.SetPixel(i, 0, Color.FromArgb(c, c, c));
        }
        bmp.Save("result.png"); //A generic error occurred in GDI+.
    }
}

为什么会这样?错误发生在x64上。还是内存问题吗?图像尺寸为65536x1,就保留的字节而言没有那么大。

我手头没有参考资料,但根据我的经验,基于GDI的图形,尤其是位图处理,仅在16位有符号坐标系中完全受支持。即,图形坐标限制在-32768和32767之间,位图的最大宽度(或高度)为65535(因为尺寸不能为负数)。后者与JPEG的最大值一致


PNG理论上可以处理更大的(32位维度),但如果两个编码器之间共享的某个组件具有JPEG限制,也就不足为奇了。对不起,我现在无法找到参考资料,但如果你仔细看的话,我想它就在那里

看看这里,使用它,这样你就不必把大的图像文件保存在内存库中。我知道。但是,我想知道为什么会发生这种情况。请尝试
新建位图(bmp).Save(“result.png”)我手头没有参考资料,但根据我的经验,基于GDI的图形,尤其是位图处理,只有在16位有符号坐标系中才完全受支持。即位图的最大宽度(或高度)为65535。这与JPEG的最大值一致。PNG理论上可以处理更大的(32位维度),但如果两个编码器之间共享的某个组件具有JPEG限制,也就不足为奇了。很抱歉,我现在无法找到引用,但是如果你仔细看的话,我想它会在那里。@cubrr:我已经试过了,但是同样的错误也发生了。
using (MemoryStream stream = new MemoryStream())
{
    bmp.Save(stream, ImageFormat.Png);
    stream.WriteTo(fs);
}