Некорректное создание Bitmap с нечетным размером сторон - C#
Формулировка задачи:
Некорректно ведет себя bitmap c нечетным размером сторон. Скажем 42х58 выглядит нормально, но если я создаю 41х58, то в результате каждая строка съезжает на 1 пиксель
На 1 картинке мой результат, на второй - как должно быть. На третьей эксперемент (не существенно)
Как обойти данное ограничение?
Решение задачи: «Некорректное создание Bitmap с нечетным размером сторон»
textual
Листинг программы
public static void SaveImage(byte[] data, int height, int width, string filename)
{
GCHandle arrayHandle = GCHandle.Alloc(data, GCHandleType.Pinned);
int bitsPerPixel = ((int)PixelFormat.Format24bppRgb & 0xff00) >> 8;
int bytesPerPixel = (bitsPerPixel + 7) / 8;
int stride = 4 * ((width * bytesPerPixel + 3) / 4);
Bitmap bmp = new Bitmap(width, height, stride, PixelFormat.Format24bppRgb,
arrayHandle.AddrOfPinnedObject()
);
bmp.Save(filename, ImageFormat.Bmp);
}
public static void SaveImage2(byte[] data, int height, int width, string filename)
{
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bmData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
IntPtr pNative = bmData.Scan0;
Marshal.Copy(data, 0, pNative, width * height * 3);
bitmap.UnlockBits(bmData);
bitmap.Save(filename, ImageFormat.Bmp);
}