Создание образа в ImageMagick происходит очень медленно (~ 40 секунд) - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь создать GIF-файл из некоторых растровых изображений, и для его загрузки требуется очень много времени. Для этого я следовал примеру на странице библиотеки github.

Вот мой код:

    public void SaveAsGif(Stream stream, ICollection<Bitmap> images, float fps, bool loop)
    {
        ICollection<IMagickImage> magickImages = new System.Collections.ObjectModel.Collection<IMagickImage>();
        float exactDelay = 100 / fps;
        foreach (Bitmap bitmap in images)
        {
            MagickImage image = new MagickImage(bitmap);
            image.AnimationDelay = (int) exactDelay;
            if (!loop)
            {
                image.AnimationIterations = 1;
            }

            magickImages.Add(image);
        }

        using (MagickImageCollection collection = new MagickImageCollection(magickImages))
        {
            QuantizeSettings settings = new QuantizeSettings();
            settings.Colors = 256;
            collection.Quantize(settings);

            collection.Optimize();
            collection.Write(stream, MagickFormat.Gif);
        }
    }

Я тестировал, и преобразование изображений из растрового изображения в MagickImages не занимает много времени, не более 5 секунд. И мои изображения около 4000x3000. Все изображения имеют одинаковый размер. Запись в поток тоже не займет много времени. Есть ли способ улучшить сроки?

1 Ответ

0 голосов
/ 07 мая 2018

Если я правильно понимаю ваш вопрос, медлительность заключается в отображении GIF, а не в его генерации. Если это так, попробуйте изменить размер изображения перед вызовом метода Add.

например:.

image.Resize(400,300);
...