作成した 2 つのアニメーション GIF があります。それらを新しいビットマップに並べて追加したいので、両方のアニメーション GIF アニメーションが表示されます。静止画像ではなく、2 つのアニメーションを並べて表示します。
このコードは、現在使用している 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 です。しかし、この方法でやろうとすると、2 つのアニメーション GIF の 2 つのアニメーションではなく、2 つの静止画像を含む 1 つの新しいビットマップが得られます。
両方のアニメーション gif を 1 つのビットマップに追加するにはどうすればよいですか。たとえば、Internet Explorer でビットマップを開くと、2 つの 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 つの画像があります。そして、SatelliteMap の残りの画像はシングルです。
次に、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 フレーム後に 1 つだけが続きます。
9 つの画像を含む画像が何度も何度もアニメーションを続け、2 番目の画像が最後までアニメーションを維持するようにするにはどうすればよいですか?
これは veljkoz が以前に書いた問題です。一方のアニメーション カウントは、もう一方よりも短くなっています。しかし、どうすれば解決できますか?