Некорректное создание 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д