Некорректное создание 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);
        }

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


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

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

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