我需要加载 GIF 动画并将它们逐帧转换为位图。为此,我使用 Drawing.Imaging 库逐帧提取我的 GIF 文件,然后将每一帧转换为位图。
除了连续帧相同且没有像素差异的情况外,一切正常。该库似乎正在丢弃此类帧。
我通过一个简单的测试得出了这个结论。我创建了一个圆圈的动画,该动画在最后一个圆圈消失和新圆圈尚未显示之间暂停。当我播放由提取的位图组成的动画时,不存在暂停。如果我比较相同帧长但不同数量的相同帧的 GIF,返回的 totalframescount 值是不同的。我还观察到网络浏览器正确显示相同的连续帧。
public void DrawGif(Image img)
{
FrameDimension dimension = new FrameDimension(img.FrameDimensionsList[0]);
int frameCountTotal = img.GetFrameCount(dimension);
for (int framecount = 0; framecount < frameCountTotal; framecount++)
{
img.SelectActiveFrame(dimension, framecount);
Bitmap bmp = new Bitmap(img); //cast Image type to Bitmap
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
Color color = bmp.GetPixel(i, j);
DrawPixel(i, j, 0, color.R, color.G, color.B);
}
}
- 有人遇到过这样的问题吗?
- 因为我对 C# 很陌生 - 有没有办法修改 .NET lib ?
- 也许有一个我不知道的解决方案,不涉及更改库?
更新的代码 - 结果是一样的
public void DrawGif(img)
{
int frameCountTotal = img.GetFrameCount(FrameDimension.Time);
for (int framecount = 0; framecount < frameCountTotal; framecount++)
{
img.SelectActiveFrame(FrameDimension.Time, framecount);
Bitmap bmp = new Bitmap(img);
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
Color color = bmp.GetPixel(i, j);
DrawPixel(i, j, 0, color.R, color.G, color.B);
}