Как получить размер изображения в графическом файле без загрузки?
Как получить размер изображения файла изображения в одно касание, не загружая его в память?
Я пытался использовать CGImageSource из пространства имен MonoTouch.ImageIO, как указано в документации Apple и в этом сообщении в блоге:
Но этот код не работает:
public Size GetImageSizeFromImageFile (string image_file_path)
{
CGImageSource imageSource = CGImageSource.FromUrl (NSUrl.FromFilename (image_file_path));
if (imageSource == null) {
// Error loading image
Console.WriteLine ("Error loading image info for file: " + image_file_path);
return Size.Empty;
}
NSDictionary imageProperties = new NSDictionary ();
imageSource.CopyProperties (imageProperties, 0);
int width = (int)imageProperties.ValueForKey (new NSString ("kCGImagePropertyPixelWidth"));
int height = (int)imageProperties.ValueForKey (new NSString ("kCGImagePropertyPixelHeight"));
Console.WriteLine (@"Image " + image_file_path + " dimensions: " + width + " x " + height+" px");
imageProperties.Dispose ();
return new Size(width, height);
}
Приведение к строкам не имеет значения, поле возвращается пустым.
Любая помощь приветствуется, спасибо!
2 ответа
Последние версии MonoTouch значительно упрощают получение свойств изображения с помощью нового GetProperties
метод. Например
using (var src = CGImageSource.FromUrl (NSUrl.FromFilename (filename))) {
CGImageOptions options = new CGImageOptions () { ShouldCache = false };
// do not forget the '0' image index or you won't get what you're looking for!
using (var p = src.GetProperties (options, 0)) {
Console.WriteLine ("{0}x{1}", p.PixelWidth, p.PixelHeight);
}
}
Похоже, это ошибка в Mono Touch. Я тестировал код в XCode с тем же изображением в Mono Touch, и он работал в XCode.
В Mono Touch после вызова imageSource.CopyProperties(imageProperties,0)
imageProperties.Keys
Количество равно 0
Так что вы должны создать отчет об ошибке на bugzilla.xamarin.com/