2010-07-20 77 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