6
我正在寻找一个.NET C#gif动画库(不一定是免费的),这将允许我拍摄一个gif文件并附加一帧jpeg甚至另一个gif文件。我还需要能够在帧之间添加更改延迟。 这里类似问题的答案通常引用基本库,它只允许您在静态图像之间添加固定延迟。高级gif库
我正在寻找一个.NET C#gif动画库(不一定是免费的),这将允许我拍摄一个gif文件并附加一帧jpeg甚至另一个gif文件。我还需要能够在帧之间添加更改延迟。 这里类似问题的答案通常引用基本库,它只允许您在静态图像之间添加固定延迟。高级gif库
我最终修改了http://www.codeproject.com/KB/GDI-plus/NGif.aspx代码来获得我需要的和它的工作! :)
为GIF源文件处理我加入这个方法:
private bool AddGifFrames(Image image)
{
// implementation
var fd = new FrameDimension(image.FrameDimensionsList[0]);
int frameCount = image.GetFrameCount(fd);
var frames = new List<Tuple<int, Image>>();
if (frameCount > 1)
{
frames = new List<Tuple<int, Image>>();
//0x5100 is the property id of the GIF frame's durations
//this property does not exist when frameCount <= 1
byte[] times = image.GetPropertyItem(0x5100).Value;
for (int i = 0; i < frameCount; i++)
{
//selects GIF frame based on FrameDimension and frameIndex
image.SelectActiveFrame(fd, i);
//length in milliseconds of display duration
int length = BitConverter.ToInt32(times, 4 * i);
//save currect image frame as new bitmap
frames.Add(new Tuple<int, Image>(length, new Bitmap(image)));
}
} // Not animated
foreach (var frame in frames)
{
HandleFrame(frame.Item2, frame.Item1);
}
return true;
}
和自定义的延迟我修改这个方法:
protected void WriteGraphicCtrlExt(int? delay)
{
Fs.WriteByte(0x21); // extension introducer
Fs.WriteByte(0xf9); // GCE label
Fs.WriteByte(4); // data block size
int transp, disp;
if (Transparent == Color.Empty)
{
transp = 0;
disp = 0; // dispose = no action
}
else
{
transp = 1;
disp = 2; // force clear if using transparent color
}
if (Dispose >= 0)
{
disp = Dispose & 7; // user override
}
disp <<= 2;
// packed fields
Fs.WriteByte(Convert.ToByte(0 | // 1:3 reserved
disp | // 4:6 disposal
0 | // 7 user input - 0 = none
transp)); // 8 transparency flag
WriteShort(delay ?? Delay); // delay x 1/100 sec
Fs.WriteByte(Convert.ToByte(TransIndex)); // transparent color index
Fs.WriteByte(0); // block terminator
}
来概括 - 这代码可以通过将帧分割为帧并添加它们来添加gif作为帧,并且还可以添加自定义延迟。
它被关闭,因为它被问到,它是重复的。你没有提到需要改变帧之间的延迟,或者你发现以前的答案不符合你的需求。 :) –
我同意,我只是没想到会得到这么快关闭:) –
请不要签署您的帖子。 –