我需要從服務器下載的原始數據初始化圖像,該服務器根據iPhone客戶機的類型提供正確尺寸的圖像。視網膜顯示和[UIImage initWithData]
我知道我應該設定刻度值是640x960的顯示器上2.0,然而,這是一個只讀屬性,不能初始化期間使用initWithData時設定。
任何想法?
我需要從服務器下載的原始數據初始化圖像,該服務器根據iPhone客戶機的類型提供正確尺寸的圖像。視網膜顯示和[UIImage initWithData]
我知道我應該設定刻度值是640x960的顯示器上2.0,然而,這是一個只讀屬性,不能初始化期間使用initWithData時設定。
任何想法?
我不知道的東西,你可以在圖像數據本身講電話,這是一個@ 2倍的圖像嵌入,但這樣的事情應該工作:
UIImage * img = ...;
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation];
這也解決了它對我來說,謝謝!我在圖像上繪製文本,需要這樣才能使得縮放比例正確。 – Jason 2010-09-28 02:44:58
Perfekt對我來說也是......但爲什麼我們必須實現這樣的低級別的東西,如果我們存儲與UIImagePNGrepresentation的圖像,並希望它回來正確?這不像蘋果。 (DataRef)
由於PNGRepresentation沒有「縮放」的概念(類似地,JPEGRepresentation沒有透明度的概念);該圖像僅由CGImage加載。雖然理論上你可以使用圖像DPI,但我確信CGImage只是忽略了DPI信息,所以UIImage必須做額外的解析。此外,DPI信息*幾乎總是毫無意義*:Mac默認爲72,Windows默認爲96,大多數數碼相機默認爲300(並且照片的「DPI」完全沒有意義;我希望角分辨率/ FOV和鏡頭失真曲線)。 – 2010-10-13 20:13:29
由於iOS的6.0 UIImage
有方法+ imageWithData:scale:
,你可以通過2.0
作爲視網膜的尺度。
您可以通過[[UIScreen mainScreen] scale]
爲尺度參數,而不是2.0f
。
把這個在您的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];
爲什麼不直接調用'[UIImage imageWithData:dataFromServer scale:[UIScreen mainScreen] .scale]'? – 2014-12-22 10:40:42
這將打破iPhone 6+。 – 2015-02-23 17:23:23
我可以建議改變問題的標題爲「如何改變的UIImage的規模財產」,使其更容易找到? – Rivera 2014-10-01 05:48:28
哇,4年前我問過這個問題。我想我會離開它,謝謝。 – Sam 2014-10-01 10:40:47