c#位图:"参数是无效的"对于不是2次幂的大小

本文关键字:quot 2次 于不 位图 参数 无效 | 更新日期: 2023-09-27 18:10:43

我正在用c#创建byte[]数组的图像,然后将它们转换为Bitmap以便将它们保存到磁盘。

下面是我代码中的一些摘录:

// Create an array of RGB pixels
byte[] pixels = new byte[width * height * 3];
// Do some processing here....
// Import the pixel data into a new bitma
Bitmap image = new Bitmap(width, height, width * 3, PixelFormat.Format24bppRgb, GCHandle.Alloc(pixels, GCHandleType.Pinned).AddrOfPinnedObject());
// Save the image
image.Save("testimage.png", ImageFormat.Png);

这工作良好,直到宽度/高度不是2的幂(即512x512工作,但511x511不),然后我得到以下错误:

Unhandled Exception: System.ArgumentException: Parameter is not valid.
   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, Int32 stride, PixelFormat format, IntPtr scan0)
   (.......)

作为参考,这里是我的using声明:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Diagnostics;

为什么它不能处理像素数据集,而不是大小为2的幂?这么大的尺寸我该怎么做?

c#位图:"参数是无效的"对于不是2次幂的大小

Micke是对的,主要原因是32位寄存器的大小是4字节,所以为了优化速度和效率,它应该是4的倍数,源