我创建了两个GIF动画。 我想将它们并排添加到一个新的位图,所以我将看到两个动画GIF动画。 不是stil图像,而是两个动画并排。
此代码现在位于form1 im的顶部:
public static class BitmapExtensions
{
public static Bitmap DoubleBitmap(this Bitmap bm)
{
Bitmap bitmap = new Bitmap(bm.Width * 2, bm.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.DrawImage(bm, Point.Empty);
g.DrawImage(bm, new Point(bm.Width, 0));
return bitmap;
}
}
public static Bitmap AppendBitmap(this Bitmap bm, Bitmap rightBitmap)
{
Bitmap bitmap = new Bitmap(bm.Width + rightBitmap.Width, Math.Max(bm.Height, rightBitmap.Height));
using (Graphics g = Graphics.FromImage(bitmap))
{
g.DrawImage(bm, Point.Empty);
g.DrawImage(rightBitmap, new Point(bm.Width, 0));
return bitmap;
}
}
}
然后我像这样使用它:
private void CreateNewImage(string DirOfUrls)
{
List<string> files = Directory.GetFiles(DirOfUrls, "RainImage*.*").ToList();
List<string> files1 = Directory.GetFiles(DirOfUrls, "SatelliteImage*.*").ToList();
Bitmap bmp = new Bitmap(@"d:\localpath\RainMapGif");//files1[i]);
Bitmap bmp1 = new Bitmap(@"d:\localpath\SatelliteMapGif");//files[i]);
//Use it
//Double the same image
Bitmap doubledBitmap = bmp1.DoubleBitmap();
//Append new image
Bitmap appendedBitmap = bmp1.AppendBitmap(bmp);
appendedBitmap.Save(@"d:\localpath\newbitmapGif", System.Drawing.Imaging.ImageFormat.Gif);
}
RainMapGif和SatelliteMapGif是动画gif的。 但是当我试图这样做时,我得到一个带有两个静止图像的新位图,而不是两个动画GIF的两个动画。
如何将两个动画GIF添加到一个位图中,当我在Internet Explorer上打开位图时,我会看到两个动画并排移动两个GIF?
编辑**
这就是我之前使用它的方式:
private void CreateNewImage(string DirOfUrls)
{
int newImageCounter = 0;
List<string> files = Directory.GetFiles(DirOfUrls, "RainImage*.*").ToList();
List<string> files1 = Directory.GetFiles(DirOfUrls, "SatelliteImage*.*").ToList();
for (int i = 0; i < files.Count; i++)
{
if (newImageCounter == 9)
{
CreateNewGif(DirOfUrls);
//break;
}
Bitmap bmp = new Bitmap(files1[i]);
Bitmap bmp1 = new Bitmap(files[i]);
//Use it
//Double the same image
Bitmap doubledBitmap = bmp1.DoubleBitmap();
//Append new image
Bitmap appendedBitmap = bmp1.AppendBitmap(bmp);
appendedBitmap.Save(@"d:\localpath\newbitmap" + newImageCounter.ToString("D6"), System.Drawing.Imaging.ImageFormat.Gif);
newImageCounter++;
}
所以我有他们两张RainMap图像和SatelliteMap图像的9张图像。 其余的卫星地图图像都是单曲。
然后我使用CreateNewGif:
private void CreateNewGif(string urlsdirs)
{
List<string> files = Directory.GetFiles(urlsdirs, "RainImage*.*").ToList();
List<string> files1 = Directory.GetFiles(urlsdirs, "SatelliteImage*.*").ToList();
List<string> test = files;
test.RemoveRange(0, files1.Count);
List<string> newbitmap = Directory.GetFiles(localdir, "newbitmap*.*").ToList();
for (int i = 0; i < test.Count; i++)
{
newbitmap.Add(test[i]);
}
uf.MakeGIF(newbitmap, localdir + "newbitmapGif", 50, true);
}
制作新的动画gif:
uf.MakeGIF(newbitmap, localdir + "newbitmapGif", 50, true);
但是新的动画gif并不好,因为雨图像在卫星图像之前结束,所以新的动画gif显示动画,9帧后只有一个继续。
我怎样才能让那些带有9张图片的人一遍又一遍地继续制作动画,第二张将保持动画直到最后?
这是veljkoz之前写过的问题。一个动画计数比另一个动画计数短。但我该如何解决呢?
答案 0 :(得分:0)
只有gif可以拥有动画。位图不会也永远不会。
此外,还有提取所有gif幻灯片的问题(请参阅this回答),将它们并排放在另一个gif中(参见this回答),并决定如果你做什么幻灯片计数不匹配(最可能是这种情况)。
就个人而言,我会选择@Mike W在评论中提出的建议......
修改强> 您必须记住,生成的gif将具有单个数量的帧,之后它将重复。所以,你想要添加的两个GIF都必须以某种方式适合那里。这里只有几个选项:
重复插入两个GIF的所有帧,直到它们同时到达末尾(例如,如果一个有6帧而另一个9 - 结果将有18帧。第一个将重复3个时代,另外2)。这(显然)延长了长度和长度。 gif的大小,这可能不是你想要的东西,但它会给你最好的结果。当数字是素数时,你会得到最坏的数字 - 例如53&amp;连接后的59帧GIF将持续3127帧。
更改帧的时间,使它们同时结束。这当然会加速/减慢部分GIF。 (例如6&amp; 9帧GIF:结果有9张幻灯片 - 你可以重复第一张GIF的前3张幻灯片到最后两张 - 这意味着第一张幻灯片将持续2帧(#1&amp;#2),第二张也是( #3&amp;#4)以及第三个(#5&amp;#6)。然后复制剩下的幻灯片 - #7,5-&gt;#8,6-&gt;#9显示的第4帧结束)。
删除部分幻灯片 - 删除部分幻灯片以缩短GIF,使计数匹配......