NGif Аниматор Фоновые проблемы - PullRequest
1 голос
/ 01 ноября 2011

Я играл с NGif Animator для изменения размера анимированных гифок, и он действительно изменяет размеры, но части во многих анимированных гифках, которые я пытался стереть.Я просмотрел комментарии на этой странице и не увидел, чтобы кто-то еще упомянул об этом.

Чтобы устранить изменение размера как причину, я просто перебираю кадры и сохраняю каждый из них.Каждый кадр является System.Drawing.Image.Прозрачность не установлена ​​(Color.Empty).

В настоящее время это мой метод тестирования:

        GifDecoder gifDecoder = new GifDecoder();
        MemoryStream memoryStream = new MemoryStream();
        new BinaryWriter((Stream)memoryStream).Write(imageToResize); // byte array
        memoryStream.Position = 0L;

        gifDecoder.Read((Stream)memoryStream);
        memoryStream.Dispose();

        string filename = Guid.NewGuid().ToString().Replace("-", String.Empty) + ".gif";
        string output = path + @"\" + filename;

        AnimatedGifEncoder animatedGifEncoder = new AnimatedGifEncoder();
        animatedGifEncoder.Start(output);
        animatedGifEncoder.SetRepeat(gifDecoder.GetLoopCount());
        animatedGifEncoder.SetQuality(10); // They say 20 is max quality will get, I've tried higher.  Makes it a little bit better but black areas instead of gray. 10 is their default.
        animatedGifEncoder.SetTransparent(Color.Empty); // This is default either way

        int frameCount = gifDecoder.GetFrameCount();
        int num = 0;

        Image frame;
        Image image = null;

        for (int index = frameCount; num < index; ++num)
        {
            frame = gifDecoder.GetFrame(num);
            animatedGifEncoder.SetDelay(gifDecoder.GetDelay(num));

            string fname = @"C:\Development\images\frame_" + num.ToString() + ".gif";
            if (File.Exists(fname)) { File.Delete(fname); }
            frame.Save(fname);

            animatedGifEncoder.AddFrame(image);
        }

        animatedGifEncoder.Finish();

Вот пример того, что происходит:

Background is gone

Фон пропал и становится серым.

Он должен выглядеть следующим образом:

Good background

Каждый имеет опыт работы с NGif и знает, что может вызватьэтот?Первый кадр всегда в порядке.У других после этого возникла проблема, поэтому я предполагаю, что что-то не сбрасывается из кадра в кадр (или перечитывается).Я добавил больше вещей к их методу сброса фрейма, но пока это не помогло.Теперь это выглядит так:

    protected void ResetFrame() 
    {
        lastDispose = dispose;
        lastRect = new Rectangle(ix, iy, iw, ih);
        lastImage = image;
        lastBgColor = bgColor;

        delay = 0;
        transparency = false; // I don't want transparency
        lct = null;
        act = null;
        transIndex = -1;
    }

1 Ответ

0 голосов
/ 31 июля 2013

На самом деле в их коде есть ошибка, байтовый массив не сбрасывается.Проверьте комментарии на их странице для решения

...