3

如何在不将其加载到内存的情况下获取单触式图像文件的图像大小?

我尝试使用 MonoTouch.ImageIO 命名空间中的 CGImageSource,如 Apple 文档和此博客文章中所述:

oleb.net

但是这段代码不起作用:

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);
    }

转换为字符串没有任何区别,该字段返回空。

任何帮助表示赞赏,谢谢!

4

2 回答 2

4

GetProperties最新的 MonoTouch 版本使使用新方法获取图像属性变得更加容易。例如

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);
    }
}
于 2012-05-25T12:59:44.947 回答
0

看起来这是 Mono Touch 中的一个错误。我用 Mono Touch 中的相同图像测试了 XCode 中的代码,它在 XCode 中工作。

imageSource.CopyProperties(imageProperties,0) imageProperties.Keys在调用Count后在 Mono Touch 中为 0

因此,您应该在 bugzilla.xamarin.com/ 创建一个错误报告

于 2012-05-25T11:32:59.720 回答