【问题标题】:Finding Bitmap image filename in C#在 C# 中查找位图图像文件名
【发布时间】:2017-11-07 20:00:29
【问题描述】:

我有一个 52 大小的位图数组,每个单元格都包含来自资源的随机图像。我想弄清楚所选图像的名称是什么,当我尝试调试程序时,“cards[i]”等于:“{System.Drawing.Bitmap}”。

如何找到cards[i]对应的图片名称?

private Bitmap[] GetResourceImages()
{
    PropertyInfo[] props = typeof(Properties.Resources).GetProperties(BindingFlags.NonPublic | BindingFlags.Static);
            var images = props.Where(prop => prop.PropertyType == typeof(Bitmap)).Select(prop => prop.GetValue(null, null) as Bitmap).ToArray();

            return images;
}

Bitmap[] cards = GetResourceImages();
int maxValue = cards.Length;
Random rand = new Random();
int idx = rand.Next(maxValue);
currentPic.Image = cards[idx];

【问题讨论】:

  • 这和C编程语言有什么关系?
  • 在您选择时保存这些信息。
  • 好吧,您检索的不是字符串,而是位图。你正在寻找 PropertyType = Bitmap... 所以你真的想返回一个带有路径值的分类数组,或者一个字典。我会检查每个属性,找到答案,然后用它做点什么……阅读你的代码,理解它。提示:Bitmap[] 不是您想要的答案。
  • 位图不包含有关其来源的信息。

标签: c# forms user-interface bitmap resources


【解决方案1】:

通过属性,您走在正确的道路上,但如果您获取属性的值,您显然会得到位图,而不是名称。

但是,实际的原始文件名完全丢失了;无法检索未保存在程序中的信息。您最接近的方法是检索属性名称。这意味着您应该查看prop.Name 而不是prop.GetValue(...)

您当然可以简单地检索 both,无论是在单独的数组中,还是在字典之类的东西中。这里我只是将它作为输出数组提供给函数。

private Bitmap[] GetResourceImages(out String[] names)
{
    PropertyInfo[] props = typeof(Properties.Resources).GetProperties(BindingFlags.NonPublic | BindingFlags.Static)
        .Where(prop => prop.PropertyType == typeof(Bitmap)).ToArray();
    Bitmap[] images = new Bitmap[props.Length];
    names = new String[props.Length];
    for(Int32 i = 0; i < props.length; i++)
    {
        images[i] = prop.GetValue(null, null) as Bitmap;
        names[i] = prop.Name;
    }
    return images;
}

调用代码:

String[] picNames;
Bitmap[] cards = GetResourceImages(out picNames);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2014-07-13
    • 2023-03-22
    相关资源
    最近更新 更多