2012-05-25 76 views
3

如何在不將內容加載到內存中的情況下獲取單點觸摸圖像文件的圖像大小?如何在不加載圖像文件的情況下獲取圖像文件的圖像大小?

我試圖用CGImageSource從MonoTouch.ImageIO命名空間,如蘋果的文檔和這篇博客文章指出:

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

投射到字符串沒有任何區別,該字段返回空白。

任何幫助表示讚賞,謝謝!

回答

0

看起來這是Mono Touch中的一個錯誤。我使用Mono Touch中的相同圖像測試了XCode中的代碼,並且它在XCode中工作。

在單觸調用imageSource.CopyProperties(imageProperties,0)imageProperties.Keys計數後是0

所以,你應該在bugzilla.xamarin.com/

4

創建錯誤報告的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); 
    } 
} 
+0

如何創建單點觸摸選項?我找不到任何關於此的文檔,並且代碼不易從obj-c轉換。 –

+0

謝謝,我會等待下一個版本。 –

相關問題