如何在单片机中获取图像文件的图像大小而不将其加载到内存中?
我尝试使用MonoTouch.ImageIO命名空间中的CGImageSource,如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);
}
投射到字符串没有任何区别,该字段返回空。
感谢任何帮助,谢谢!
答案 0 :(得分:4)
最新的MonoTouch版本使用新的GetProperties
方法获取图像属性变得更加容易。 E.g。
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);
}
}
答案 1 :(得分:0)
看起来这是Mono Touch中的一个错误。我使用Mono Touch中的相同图像在XCode中测试了代码,它在XCode中工作。
在调用imageSource.CopyProperties(imageProperties,0)
imageProperties.Keys
计数为0后,在Mono Touch中
所以你应该在bugzilla.xamarin.com /
创建一个错误报告