UIImage *p_w_picpath2 = [UIImage p_w_picpathNamed:@"Default"];
ios4支持高分辨率的一些总结
推荐 原创
©著作权归作者所有:来自51CTO博客作者life173的原创作品,请联系作者获取转载授权,否则将追究法律责任
iPhone4采用了一个叫做retina的屏幕,尺寸和老的iphone一样大,但是分辨率提高了4倍,看起高清的图来,爽太多了,根本看不到像素点.
对于老的app来说,在iphone4中运行,会自动用4个像素替代原来的一个像素,这样就不用更改代码,使得老app可以自然的在iphone4中运行,但是UI的效果会有些蒙蒙的,不是最佳的效果,要达到最佳,必须为原来的图片资源,重新设计一份640*960的高清版本,这样才能在iphone4内达到最佳的UI效果~
下面就来简单总结下在ios4中怎么样使用高清图,首先要了解一些概念:
Points Versus Pixels:
When using native drawing technologies such as Quartz, UIKit, and Core Animation, you specify coordinate values using a logical coordinate space, which measures distances in points. This logical coordinate system is decoupled from the device coordinate space used by the system frameworks to manage the pixels on the screen.
一般程序中使用到的尺寸都是以point来计算的.
在老的iphone中,point和pixel基本没怎么去分辨,因为都是1:1的,都是320*480.
但是在iphone4或以后的设备中,这个不再是1:1的关系,对于iphone4的retina屏幕来说,1point=2pixels,屏幕的最大point的size仍是320*480.
接下来就说下怎么样使用高清图:
假设现在有两附图Default.png(320*480)和Default@2x.png(640*960)
UIImage *p_w_picpath1 = [UIImage p_w_picpathNamed:@"Default.png"];
UIImage *p_w_picpath2 = [UIImage p_w_picpathNamed:@"Default"];
UIImage *p_w_picpath2 = [UIImage p_w_picpathNamed:@"Default"];
上面两行代码,在ios4中,都会自动根据你的手机分辨率,来自动匹配图片:
如果是iphone 3G和3GS,调用上面的结果,p_w_picpath1和p_w_picpath2得到的都是Default.png(320*480)这张图片,在查看p_w_picpath的size,你会发现是320*480的(按point来计),再看p_w_picpath的scale这个property是1.0,表示实际的1个piont对应了一个像素点,所以图片的实际像素是(320*scale)*(480*scale)=320*480.
如果是iphone4,返回的结果两个p_w_picpath都是Default@2x.png(640*960)这张图,再次查看p_w_picpath的size,你会发现仍然是320*480(points),但是scale是2.0,表示1个point对应图片上面的两个像素点,所以图片的实际像素是(320*scale)*(480*scale)=640*960.
所以,只用给同名的高清图加上@2x这个后缀,用UIImage的p_w_picpathNamed这个函数调用图片名(未带@2x的),就会自动帮你调用合适的图片,使用起来很方便.
你也可以使用,UIImage的initWithContentsOfFile:(需要图片的完整路径)函数来load图片,但是这个不会帮你自动区分图片,你需要自己根据手机的分辨率来指定调用Default.png还是Default@2x.png.
可以做如下一些测试,能够加深印象:
准备Default.png(320*480),Default@2x.png(640*960),DefaultCopy.png(320*480)和Default_Copy@2x.png(640*960)四张图,分别用p_w_picpathNamed:和initWithContentsOfFile:来调用(直接调用各个文件名:Default.png,Default@2x.png, DefaultCopy.png, Default_Copy@2x.png),然后分别在iphone 3G和iphone 4上面显示看效果,顺便输出p_w_picpath的size和scale来比较.会对这个问题有更渗入的理解.
举个例子:
上面提到过在iphone4上面用p_w_picpathNamed函数调Default.png,返回的是Default@2x.png(640*960)这张图,看起来就会很清楚.
但是如果调用DefaultCopy.png,因为它找不到DefaultCopy@2x.png这张高清图,只能用原来小size的图,所以返回还是DefaultCopy.png(320*480),size是320*480,但是scale是1.0,实际图像的像素就是(320*scale)*(480*scale)=320*480,显示效果差,因为图片像素只有高清的1/4.
以上都是本人的一些简单的总结,难免会有疏漏不正确,多多包涵.
上一篇:开博的目的!
下一篇:Mac OS X下的截屏功能
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Unity下如何播放8K超高分辨率的RTMP流?
在Unity中使用RTMP播放器播放8K流,需要考虑到多个方面的因素和技术要求。以下是一个详细的步骤和要点概述,帮助实现这一目标:1. 选择合适的RTMP播放器插件首先,需要选择一个支持8K视频流播放的RTMP播放器插件。并非所有插件都支持8K分辨率,据我们了解,好多Unity的RTMP播放器,连4K都非常吃力。因此,在选择插件时,需要仔细阅读插件的文档和说明,确认其是否支持8K视频流。大牛直播S
Unity RTMP播放器 Unity RTSP播放器 Unity3D RTMP播放 Unity3D RTSP播放器 大牛直播SDK -
Android平台下VR头显如何低延迟播放4K以上超高分辨率RTSP|RTMP流
技术背景VR头显需要更高的分辨率以提供更清晰的视觉体验、满足沉浸感的要求、适应透镜放大效应以及适应更广泛的可视角度,超高分辨率的优势如下:提供更清晰的视觉体验:VR头显的分辨率直接决定了用户所看到的图像的清晰度。更高的分辨率意味着更多的像素数,可以呈现更细腻、更逼真的图像,从而提升用户的视觉体验,更高的分辨率可以进一步减少图像中的颗粒感和纱窗效应,让用户感受到更加真实的虚拟世界。满足沉浸感的要求:
Unity3D rtmp Unity RTMP Unity3D RTSP Unity RTMP播放器 大牛直播SDK -
高分辨率=高精度?
做技术的对这两个名词一定不陌生,尤其是做传感器数据采集时,精度和分辨率是两个
高精度 公众号 数据采集 -
引导式超高分辨率
图像超高分辨率的实现
引导式超高分辨率