Это не так Посмотрите еще раз на его код. Он пытается применить длину, чтобы превратить негатив в позитив, только если полученная длина негативного шага меньше 0.

ал самый быстрый способ конвертировать растровое изображение в 8bpp. Я нашел 2 способа:

1.

        public static System.Drawing.Image ConvertTo8bpp(Bitmap oldbmp)
    {
        using (var ms = new MemoryStream())
        {
            oldbmp.Save(ms, ImageFormat.Gif);
            ms.Position = 0;
            return System.Drawing.Image.FromStream(ms);
        }
    }

2. http://www.wischik.com/lu/programmer/1bpp.html

Но:1. В результате получается очень низкое качество (плохой поддон)

а также2 дает мне растровое изображение с отрицательным шагом, когда я пытаюсь блокировать биты и копировать данные в байтовый массив, я получаю исключение:Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.

        BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);

        this.stride = bmpData.Stride;
        this.bytesPerPixel = GetBytesPerPixel(bmp.PixelFormat);
        int length = bmpData.Stride * bmp.Height;
        if (this.stride < 0)
            this.data = new byte[-length];
        else
            this.data = new byte[length];
        Marshal.Copy(bmpData.Scan0, data, 0, length);

        //Unlock the bitmap
        bmp.UnlockBits(bmpData);

Как я могу сделать2 дает положительный шаг? Или как я могу скопировать данные, используя блокировку отрицательного шага?

Ответы на вопрос(5)

Ваш ответ на вопрос