我需要从服务器下载的原始数据初始化图像,该服务器根据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