2011-06-01 29 views
0
NSImage *testImages; 
NSURL *testImageUrl = [NSURL URLWithString:@"file:///foo/testImage.png"]; 
NSData *imageData = [testImageUrl resourceDataUsingCache:NO]; 
testImages = [[NSImage alloc] initWithData:imageData ]; 

如何獲取testImages的NSSize。在調試器中,我可以從_NSSize屬性中讀取它,但[testImages size]返回(0,0)獲取使用NSData分配的NSImage的大小

我需要它確定在進行各種轉換之前它是否爲橫向或縱向圖像。

這工作,但我不知道爲什麼?

NSArray *representation = [testImages representations]; 
NSImageRep *repOne = [representation objectAtIndex:0]; 
int width = [repOne pixelsWide]; 
return width; 
+0

'[NSURL resourceDataUsingCache:]'已在Mac OS X v10.4中棄用。你的目標操作系統是什麼? – 2011-06-01 02:36:40

+0

你在'-initWithData:'之後檢查'testImages'是否爲'nil'? – 2011-06-01 05:37:05

回答

0

NSImage中類,我們確實有屬性,它給我們的圖像的大小NSImage

- (NSSize)size 
    NSSize size = testImages.size; 
+0

爲了準確,在'NSImage'中沒有'size'聲明的屬性。 – 2011-06-01 03:20:54

+0

NSIamge和UIImage都有一個size屬性。 @Bavarious,你在說什麼? – 2011-06-01 05:31:22

+0

@黑色我在說一個聲明的屬性與getter(和可選的setter)方法不一樣。 – 2011-06-01 05:33:45

0

「...但[testImages大小]回報(0,0)」

始終考慮是否在你的代碼的某個時刻,某種方法或調用返回nil在那裏你並不期待它。然後回頭看看代碼,找出代碼(或者你的假設)出錯的地方。

NSURL *testImageUrl = [NSURL URLWithString:@"file:///foo/testImage.png"]; 
NSData *imageData = [testImageUrl resourceDataUsingCache:NO]; 
NSImage *testImages = [[NSImage alloc] initWithData:imageData ]; 
NSSize size = [testImages size]; 

如果由於某種原因,URLWithString:調用失敗,它將返回nil。發送-resourceDataUsingCache:消息到nil基本上會導致nil(它只是被忽略)。試圖創建一個NSImagenil傳入數據參數將返回nil。並且發送-size消息到nil將基本上導致nil,其將等於{0, 0}的大小。

因此,仔細檢查以確保您的郵件不只是發送到零。

只是另一個說明,但在創建其他類型的URL時,通常在創建基於文件的NSURL s和+URLWithString:時使用+fileURLWithPath: