1

私のコード:

private void CreateAnimatedGif(List<string> GifsFilesRadar , List<string> GifsFilesSatellite)//string FileName1 , string FileName2)
{
    Bitmap bitmap = null;
    DirectoryInfo inf = new DirectoryInfo(tempGifFiles);
    FileInfo[] fi = inf.GetFiles("*.gif");
    for (int i = 0; i < fi.Length; i++)
    {
        Bitmap file1 = new Bitmap(GifsFilesRadar[i]);
        Bitmap file2 = new Bitmap(GifsFilesSatellite[i]);
        //calculate the new width proportionally to the new height it will have
        int newWidth = file1.Width + file1.Width / (file2.Height / (file2.Height - file1.Height));

        bitmap = new Bitmap(newWidth + file2.Width, Math.Max(file1.Height, file2.Height));
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            //high quality rendering and interpolation mode
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            //resize the left image
            g.DrawImage(file1, new Rectangle(0, 0, newWidth, file2.Height));
            g.DrawImage(file2, newWidth, 0);
            string t = @"d:\GifsForAnimations" + "\\" + i.ToString("D6") + ".Gif";
            bitmap.Save(t, System.Drawing.Imaging.ImageFormat.Gif);
            if (i == 4)
            {
                break;
            }
        }
    }
    List<string> gif = new List<string>();
    DirectoryInfo info = new DirectoryInfo(@"d:\GifsForAnimations");
    FileInfo[] finfo = info.GetFiles();
    for (int i = 0; i < finfo.Length; i++)
    {
        gif.Add(finfo[i].FullName);
    }
    newFile.MakeGIF(gif, @"d:\newGifAnim.gif", 80, true);
}

最後に、新しいアニメーション gif ファイルができました。これで国境ができました。場所は次のとおりです。

  • 左下隅: 232.0,408.0
  • 左上隅: 232.0,211.0
  • 右上隅: 524.0,211.0
  • 右下隅: 524.0,408.0

各画像にフレームを追加して、境界線をマークしたいと思います。境界線が赤になり、境界線のサイズが 5 ピクセルになるとします。

既存のビットマップまたは gif ファイルの周りに四角形を作成するにはどうすればよいですか? ここで私のサンプルコードに接続する必要はありませんが、私が持っている場所で画像の周りにフレーム/境界線を作成するにはどうすればよいですか?

4

1 に答える 1

8

後にこの行を追加できますg.DrawImage(file2, newWidth, 0);

g.DrawRectangle(new Pen(Brushes.Red, 5), new Rectangle(0, 0, newWidth, file2.Height));

ここに小さなテスト方法がありますので、それが機能していることを確認できます

    private void button1_Click(object sender, EventArgs e)
    {
        Bitmap bitmap = new Bitmap(@"C:\avatar63.jpg");
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.DrawRectangle(new Pen(Brushes.Red, 5), new Rectangle(0, 0, bitmap.Width, bitmap.Height));
        }
        bitmap.Save(@"C:\avatar63New.jpg");
    }

前:ここに画像の説明を入力後: ここに画像の説明を入力

四角形は好きな場所に追加できます。X,Y,Width,Height

g.DrawRectangle(new Pen(Brushes.LimeGreen, 5), new Rectangle(50, 50, 100, 100));

4点構造を使用すると、これが機能するはずです

   Point topLeft = new Point(232,211 );
   Point topRightr = new Point(232, 408);
   Point bottomLeft = new Point(524, 211);
   Point bottomRight = new Point(524, 408);

   g.DrawRectangle(new Pen(Brushes.LimeGreen, 5), new Rectangle(topLeft, new Size(topRightr.X - topLeft.X, bottomLeft.Y - topLeft.Y)));

  // TopLeft = rectangle location
  // TopRight.X - TopLeft.X = Width of rectangle
  // BottomLeft.Y - TopLeft.Y = height of rectangle

ここに画像の説明を入力

于 2013-01-29T22:30:44.957 に答える