Я создаю изображения с массивом byte[]
в C#, а затем преобразовываю их в Bitmap
, чтобы сохранить их на диске.C# Растровое изображение: «Параметр недопустим» по размерам, которые не имеют значения 2
Вот несколько выдержек из моего кода:
// 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? Как я могу заставить его работать с такими размерами?
Возможный дубликат [Почему должен «шаг» в конструктор System.Drawing.Bitmap будет кратен 4?] (http://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple -of-4). – Micke