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