Некорректное создание Bitmap с нечетным размером сторон - C#

Узнай цену своей работы

Формулировка задачи:

Некорректно ведет себя bitmap c нечетным размером сторон. Скажем 42х58 выглядит нормально, но если я создаю 41х58, то в результате каждая строка съезжает на 1 пиксель На 1 картинке мой результат, на второй - как должно быть. На третьей эксперемент (не существенно) Как обойти данное ограничение?

Решение задачи: «Некорректное создание Bitmap с нечетным размером сторон»

textual
Листинг программы
  1.         public static void SaveImage(byte[] data, int height, int width, string filename)
  2.         {
  3.             GCHandle arrayHandle = GCHandle.Alloc(data, GCHandleType.Pinned);
  4.  
  5.             int bitsPerPixel = ((int)PixelFormat.Format24bppRgb & 0xff00) >> 8;
  6.             int bytesPerPixel = (bitsPerPixel + 7) / 8;
  7.             int stride = 4 * ((width * bytesPerPixel + 3) / 4);
  8.  
  9.             Bitmap bmp = new Bitmap(width, height, stride, PixelFormat.Format24bppRgb,
  10.                 arrayHandle.AddrOfPinnedObject()
  11.             );
  12.             bmp.Save(filename, ImageFormat.Bmp);
  13.         }
  14.  
  15.         public static void SaveImage2(byte[] data, int height, int width, string filename)
  16.         {
  17.             Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb);
  18.             BitmapData bmData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
  19.             IntPtr pNative = bmData.Scan0;
  20.             Marshal.Copy(data, 0, pNative, width * height * 3);
  21.             bitmap.UnlockBits(bmData);
  22.             bitmap.Save(filename, ImageFormat.Bmp);
  23.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут