我一直在玩NGif Animator来调整GIF动画的大小,它确实调整大小,但是我试过的许多动画GIF中的部分被删除了。我查看了该页面上的评论,但没有看到其他人提及它。
为了消除调整大小的原因,我只需循环遍历框架并保存每个框架。每个帧都是一个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();
以下是正在发生的事情的一个例子:
背景消失了,它是灰色的。
它应该看起来像:
任何人都有使用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;
}
答案 0 :(得分:0)
他们的代码中确实存在一个错误,一个字节数组没有被重置。查看其页面上的评论以获取解决方案