C # ImageFormat для строки - PullRequest
       3

C # ImageFormat для строки

11 голосов
/ 13 декабря 2011

Как я могу получить читаемую человеком строку (т.е. сам формат изображения) из System.Drawing.ImageFormat объекта?

Я имею в виду, если у меня есть ImageFormat.Png, возможно ли преобразовать его в строку "png"?

РЕДАКТИРОВАТЬ: Я вижу здесь некоторые недоразумения. Вот мой код:

Image objImage = Image.FromStream(file);

ImageFormat imFormat = objImage.RawFormat;

imFormat.ToString(); 

Возвращает "[ImageFormat: b96b3caf-0728-11d3-9d7b-0000f81ef32e]", но я хочу "Png"!

Ответы [ 4 ]

26 голосов
/ 11 декабря 2012

Используйте класс ImageFormatConverter из пространства имен System.Drawing:

this.imageInfoLabel.Text = 
    new ImageFormatConverter().ConvertToString(this.Image.RawFormat);

Для PNG-изображения возвращается Png и т. Д.

9 голосов
/ 13 декабря 2011

ImageFormat.Png.ToString() возвращает "Png" ...

РЕДАКТИРОВАТЬ: ОК, похоже, ToString возвращает имя только для ImageFormat экземпляров, возвращаемых статическими свойствами ...

Вы можете создать поисковый словарь, чтобы получить имя от Guid:

private static readonly Dictionary<Guid, string> _knownImageFormats =
            (from p in typeof(ImageFormat).GetProperties(BindingFlags.Static | BindingFlags.Public)
             where p.PropertyType == typeof(ImageFormat)
             let value = (ImageFormat)p.GetValue(null, null)
             select new { Guid = value.Guid, Name = value.ToString() })
            .ToDictionary(p => p.Guid, p => p.Name);

static string GetImageFormatName(ImageFormat format)
{
    string name;
    if (_knownImageFormats.TryGetValue(format.Guid, out name))
        return name;
    return null;
}
0 голосов
/ 13 декабря 2011

Значения ImageFormat определяются по Guid, вам нужно создать собственную карту Guid -> Имя

var dict = (
    from t in typeof(ImageFormat).GetProperties()
    where t.PropertyType == typeof(ImageFormat)
    let v = (ImageFormat)t.GetValue(null, new object[0])
    select new { v.Guid, t.Name }
    ).ToDictionary(g => g.Guid, g => g.Name);

string name;
if (dict.TryGetValue(ImageFormat.Png.Guid, out name))
{
    Console.WriteLine(name);
}
0 голосов
/ 13 декабря 2011

Не так много форматов изображений. Таким образом, вы можете использовать переключатель в случае, если вы хотите указать свои описания самостоятельно или просто использовать

Imageformat.Specific.ToString()

(конкретное название конкретного формата изображения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...