【问题标题】:Displaying random GIF images from a specified location显示来自指定位置的随机 GIF 图像
【发布时间】:2018-05-16 03:32:21
【问题描述】:

我已经在我的 AI 上工作了一段时间,但我似乎无法让我的 AI 从这个位置将随机 GIF 图像显示到我的图片框。

C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\

需要的示例。

string[] imagePaths1 = Directory.GetFiles(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\images", "*.gif", SearchOption.AllDirectories);

但我需要 GIF 图像而不是音频文件。

这是我一直在使用的代码示例。

case "test":
                int image1;
                Random randim = new Random();
                image1 = randim.Next(0, 4);

                switch (image1)
                {
                    case 0:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\giphy.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;
                    case 1:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\Party!.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;
                    case 2:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\Staredown.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;

                    case 3:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\tenor.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;

                    case 4:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\idgaf-obama.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;

                    case 5:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\homealone.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;

                    case 6:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\giphy.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;

                    case 7:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\fastsoccer.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;

                    case 8:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\wallstreet.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;


                    case 9:
                        pictureBox2.Image = Image.FromFile(@"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\DYjbX.gif");
                        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.CancelAsync();
                        break;



                }

【问题讨论】:

  • 你的代码现在做什么?你想让它做什么呢?
  • 很高兴知道谢谢。
  • 我还在学习,我猜这是我在 ' 开关 (image1) { case 0: pictureBox2.Image = Image.FromFile(@" C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\giphy.gif"); pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;图片框1.CancelAsync();打破;'
  • 现在它只随机化我在案例 1、案例 2、案例 3 中添加的图像,我希望它随机化文件夹中的所有图像。 @mjwills
  • 我的问题是如何将文件夹中的 gif 图像随机化到图片框中,而不是按照我原来的方式,我已经尝试了多次,所以我想我会寻求帮助,然后社区非常有帮助,感谢大家的帮助,这么多好主意!和指针,我非常感谢你。

标签: c# visual-studio visual-studio-2017


【解决方案1】:

此代码可以帮助您入门:

var random = new Random();
var folder = @"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\images";

var fileNames = Directory.EnumerateFiles(folder, "*.gif", SearchOption.AllDirectories)
    .Select((file, index) => new {file, index})
    .ToDictionary(z => z.index, y => y.file);

var randomPic = fileNames[random.Next(0, fileNames.Count)];
pictureBox2.Image = MediaTypeNames.Image.FromFile(Path.Combine(folder, randomPic));
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.CancelAsync();

主要是将文件名放入数据结构中。我使用Dictionary - 你可以使用List 使用:

var random = new Random();
var folder = @"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\images";

var fileNames = Directory.EnumerateFiles(folder, "*.gif", SearchOption.AllDirectories).ToList();

var randomPic = fileNames[random.Next(0, fileNames.Count)];
pictureBox2.Image = MediaTypeNames.Image.FromFile(Path.Combine(folder, randomPic));
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.CancelAsync();

然后随机选择一个文件名并使用该文件名填充pictureBox2

您还应该将strongly consider 移动为random 成为static 字段。

【讨论】:

  • 为什么要从索引创建字典?为什么不直接创建一个数组(您可以从中自然索引)?
  • 这也可以@Enigmativity。我使用Dictionary 部分是为了尝试向 OP 教授一些新东西。我将更改答案以明确显示 List 代码 - 感谢您的提问。
【解决方案2】:

您可以使用以下内容:-

var basePath =
    @"C:\Users\scatt\Desktop\Marvel-J.A.R.V.I.S-Personal-Assistant-Winform-C--master\Marvel J.A.R.V.I.S Personal Assistant\Resources\AIPICS\";

var pics = System.IO.Directory.EnumerateFiles(basePath, "*.gif").ToArray();
var randomPic = pics.OrderBy(p => Guid.NewGuid()).First();
pictureBox2.Image = MediaTypeNames.Image.FromFile(randomPic);
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.CancelAsync();

【讨论】:

  • 哇,这是一个更简单的视觉效果,不是我的意思,但更容易谢谢!!!
  • 我不是故意按错按钮。 @基思尼古拉斯
  • 对不起,我修好了。
  • 你没有对我投反对票 :) 你还没有足够的声誉来做那件事
  • 请不要使用Guid.NewGuid() 来生成熵。 Guid 保证是唯一的,而不是随机的。始终使用 RNG。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
相关资源
最近更新 更多