2010-07-20 55 views
50

我需要從服務器下載的原始數據初始化圖像,該服務器根據iPhone客戶機的類型提供正確尺寸的圖像。視網膜顯示和[UIImage initWithData]

我知道我應該設定刻度值是640x960的顯示器上2.0,然而,這是一個只讀屬性,不能初始化期間使用initWithData時設定。

任何想法?

+3

我可以建議改變問題的標題爲「如何改變的UIImage的規模財產」,使其更容易找到? – Rivera 2014-10-01 05:48:28

+1

哇,4年前我問過這個問題。我想我會離開它,謝謝。 – Sam 2014-10-01 10:40:47

回答

93

我不知道的東西,你可以在圖像數據本身講電話,這是一個@ 2倍的圖像嵌入,但這樣的事情應該工作:

UIImage * img = ...; 
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation]; 
+0

這也解決了它對我來說,謝謝!我在圖像上繪製文本,需要這樣才能使得縮放比例正確。 – Jason 2010-09-28 02:44:58

+0

Perfekt對我來說也是......但爲什麼我們必須實現這樣的低級別的東西,如果我們存儲與UIImagePNGrepresentation的圖像,並希望它回來正確?這不像蘋果。 (DataRef));其中,DataProviderRefDataProvider = CGDataProviderCreateWithCFData((CFDataRef)); \t \t \t CGImageRef cgHeaderImage = CGImageCreateWithPNGDataProvider(dataProvider,NULL,NO,kCGRenderingIntentDefault); \t \t \t CGDataProviderRelease(數據提供程序); \t \t \t headerCell.headerImage.image = [UIImage的imageWithCGImage:cgHeaderImage比例:2.0取向:UIImageOrientationUp]; CGImageRelease(cgHeaderImage); – Gerd 2010-10-11 10:34:10

+0

由於PNGRepresentation沒有「縮放」的概念(類似地,JPEGRepresentation沒有透明度的概念);該圖像僅由CGImage加載。雖然理論上你可以使用圖像DPI,但我確信CGImage只是忽略了DPI信息,所以UIImage必須做額外的解析。此外,DPI信息*幾乎總是毫無意義*:Mac默認爲72,Windows默認爲96,大多數數碼相機默認爲300(並且照片的「DPI」完全沒有意義;我希望角分辨率/ FOV和鏡頭失真曲線)。 – 2010-10-13 20:13:29

-4

AFAIK你不需要自己設置刻度值。操作系統將爲您處理像素轉換點。

+0

如果我只是從數據初始化一個UIImage,它會在iPhone 4上擴展(例如,iPhone 4上的320x480圖像將全屏顯示)。我需要防止這種莫名其妙,所以我可以使用高分辨率圖像 – Sam 2010-07-20 11:20:11

+0

啊好吧不知道,謝謝! – Rengers 2010-07-20 11:35:07

+2

只有當圖像的@ 2x後綴不可能,當你'initWithData' – 2012-02-28 17:39:26

18

由於iOS的6.0 UIImage有方法+ imageWithData:scale:,你可以通過2.0作爲視網膜的尺度。

7

您可以通過[[UIScreen mainScreen] scale]爲尺度參數,而不是2.0f

-1

把這個在您的m,如果你想或者對進口類

BOOL isRetina(){ 
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 
     return [[UIScreen mainScreen] scale] == 2.0; 
    } 
    return NO; 
} 

然後與服務器數據創建映像時(調用函數IMAO當C的語法是更好):

[UIImage imageWithData:dataFromServer scale:isRetina()?2:1]; 
+2

爲什麼不直接調用'[UIImage imageWithData:dataFromServer scale:[UIScreen mainScreen] .scale]'? – 2014-12-22 10:40:42

+1

這將打破iPhone 6+。 – 2015-02-23 17:23:23