Ошибка в квантовании изображения с использованием NQUANT - PullRequest
0 голосов
/ 17 января 2019

Я недавно приобрел пакет NuGet Nquant .

Я планирую использовать это, чтобы уменьшить размер файла растрового изображения и сохранить его в PNG. Но я получаю эту ошибку:

Изображение, которое вы пытаетесь квантовать, не содержит 32-битную палитру ARGB. Это изображение имеет битовую глубину 8 с 256 цветами.

Кто-нибудь здесь использовал Nquant? А вы сталкивались с этой ошибкой и как ее исправили?

Мой код для вашей справки:

var bitmap = new Bitmap(width, jbgsize / height, PixelFormat.Format8bppIndexed);
        ColorPalette pal = bitmap.Palette;
        for (int i = 0; i <= 255; i++)
        {
            // create greyscale color table
            pal.Entries[i] = Color.FromArgb(i, i, i);
        }
        bitmap.Palette = pal; // you need to re-set this property to force the new ColorPalette

        var bitmap_data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
        Marshal.Copy(output, 0, bitmap_data.Scan0, output.Length);
        bitmap.UnlockBits(bitmap_data);
        MemoryStream stream = new MemoryStream();
var quantizer = new WuQuantizer();
        using(var bmp = new Bitmap(bitmap))
        {
            using (var quantized = quantizer.QuantizeImage(bitmap))
            {
                quantized.Save(stream, ImageFormat.Png);
            }
        }

        byteArray = stream.ToArray();
        return byteArray.Concat(output).ToArray();
...