国产机哪个手机拍照时屏幕是黑的是全屏!屏幕上啥都没有只有个拍照键!大气!

苹果要给你吃
2017已经余额不足
一年过得真是快
每一年,手机厂商都会为新手机找一些卖点
比如去年,是「双摄」
而今年智能手机的潮流无疑是——
「全面屏」
2017年,三星、苹果、华为、小米、vivo……
纷纷推出了全面屏手机
面对市场上那么多的全面屏手机
很多卫精问,该买哪款好?
下面小卫就为大家介绍2017最火的8款全面屏手机,
看看你最喜欢哪款?
开聊之前,先来科普一下「全面屏」:
全面屏,顾名思义是指手机前面板全是屏幕的手机(屏占比为100%)。但在现有技术条件下尚无法做到,所以现在市面上所说的“全面屏”是指边框极窄、屏占比接近100%的手机。
三星Galaxy S8/S8+
三星今年上半年发布了旗舰机Galaxy S8。作为OLED屏大佬,三星在屏幕上可谓下足了功夫——S8配备全视曲面屏,屏幕尺寸5.8英寸,采用Super AMOLED材质。虽采用了全面屏的设计,但手机体积相较于上一代并没增大。正面是惊艳的曲面全面屏设计,背面是精致的3D曲面玻璃,使得S8的颜值和科技感都十分出众。
从这款手机开始,今年国内的全面屏手机大战正式开始了。
今年8月,三星还发布了Galaxy Note 8,Note8搭配了6.3英寸的全视曲面屏设计,而且首次搭配了1200万双摄。还有很多黑科技的加持,比如虹膜识别、面部识别、指纹识别、无线充电、快充、IP68防水、NFC等,可谓目前安卓阵营中的“机皇配置”。
三星这2款旗舰机皇,让今年的全面屏大战一开始就显得激烈异常。
苹果iPhone X
iPhone X作为苹果十周年的特别版,可谓最近几年苹果创新方面最为给力的一款机型了。无论是外观方面还是性能方面都达到了一个新高度。
5.8英寸的OLED全面屏,主屏分辨率像素,屏占比约81.49%,屏幕上方采用了异形“刘海”设计。其他方面,搭配了1200万的后置双摄、IOS11系统、A11处理器,还支持FaceID解锁、无线充电、快充等技术。
价格方面,土豪专享,64GB版本8388元起步。
这样一部颠覆性机型,可以说是2017年的全面屏手机代表了,发售仅一个多月,已经虏获了众多果粉们的芳心。
小米MIX2是小米9月11日刚发布的第二代全面屏手机,主打全面屏2.0。
配备5.99英寸18:9全面屏,四曲面陶瓷机身,边角由方形变为圆润。中框由陶瓷变为7系铝材质,正面是一整块无切割的定制圆角玻璃。
陶瓷机身的小米MIX 2,可以说是高端大气上档次,外观的科技感也很惊艳。大家已经被小米MIX 2线上平台58秒售空刷了屏,也可见其魅力。
夏普AQUOS S2
作为全面屏手机的始作俑者,在被富士康全面接管后的夏普,在国内推出的一款新品——夏普“美人尖”AQUOS S2。
S2主打“全面屏”,区别于以往所有全面屏产品,采用全球首创FFD异形全面屏技术,创新性地实现屏幕开孔,将前置摄像头嵌入屏幕顶端中央,就如同“美人尖”。S2的异形全面屏给人留下了深刻的印象。
不过除此以外,这款手机的配置不高,定位中端,总体的设计并没有太大的亮点,市场表现也是平平。夏普手机在国内的发展之路还是任重道远啊。
提到VIVO,“柔光双摄”的广告词就在脑海里挥之不去。不过今年的VIVO很不VIVO,一改以拍照为主的宣传点,及时加入“全面屏”的大混战,X20就这样孕育而出。
屏幕为6.01英寸、分辨率的Super AMOLED面板。采用前后2x1200万的四摄设计,还支持vivo独家研发的“图像魔方”技术,大幅度提高逆光环境下的拍摄表现。“照亮你的美”,果然有一套!
9月,金立发布了旗下首款全面屏手机——金立M7,超高的屏占比、大容量电池,安全双芯片成为这款手机的亮点。在全面屏爆发的下半年,金立让我们看到了主打安全的手机也可以拥有全面屏。
金立M7采用了18:9的1080P分辨率全面屏设计,AMOLED屏幕也带来了更加艳丽的显示效果,背面的太阳纹也是设计的亮点所在。
全面屏超薄机身、大容量电池、多重防护的安全性能,这些都是金立长年深厚的技术底蕴拿出来的亮点。国内的中高端全面屏手机市场,又迎来一位强劲的对手。
华为Mate10系列
10月20日,华为正式发布了年度旗舰HUAWEI Mate 10系列。全系标配的全面屏、徕卡双摄、麒麟970人工智能芯片给我们留下了深刻的印象。
作为华为的高端产品,Mate系列向来代表着华为最顶尖的工艺和技术。
Mate10 Pro就是诸多黑科技加身的代表作:比三星的虹膜识别更快更准确的3D人脸扫描、堪比高通骁龙840的麒麟970处理器、最高8G的运行内存,都使得这部Mate10 Pro“旗舰味”十足。
再加上颜值出众的高屏占比设计和2K分辨率的AMOLED屏幕,足以使其成为本年度最受期待的国产机皇。
作为今年全面屏战场中最后一批入局的角色,OPPO对于它新一代的年度旗舰拥有极大的信心。今年上半年推出了OPPO R11,前后两千万像素+人像美颜虚化,一时惊艳全场。如今,OPPO也赶上了全面屏手机潮流,在OPPO R11的基础上推出了OPPO R11s,还加入了“星幕屏”的概念。
R11s的额头比起前代缩窄了44.3%之多,细看手机正面,无论是息屏下亦或是亮屏中,高达85%屏占比的18:9屏幕都能带来沉浸入其中的视觉体验。机身四周微微闪耀的光晕更是为它增色不少。
另外,OPPO R11s采用“真双摄”的解决方案,后置由1600万的高解析力镜头和2000万像素的高感光镜头组成,根据环境光线不同,手机智能地选择高解析或高感光摄像头。可以说,OPPO R11s做到了最好的全面屏“拍照手机”。
这些就是今年最热的8款全面屏手机了
你最喜欢哪个?
最近有入手的计划吗?
有什么要吐槽的?
留言告诉小卫
尽管吐槽吧!手机拍照选16:9还是4:3好?
我的图书馆
手机拍照选16:9还是4:3好?
05-29 17:44
这要从两个方面去考虑:1.根据你拍摄对象,看看适合怎样的构图。比如你要拍广阔的平原之类的大场景,就可以选16:9的画面,横幅;假使你要拍高大的景物,例如高塔、大厦、树株等,就可以选16:9竪幅;如果你要拍些 在画面中比较集中的景物,即可以选4:3的画面。 总之,是根据你的构图来确定。2.如果你打算把照片放到电视机观看,那就可以根据你的电视机的屏幕,选择相应比例的画面。
03-25 11:33
小7的主摄像头像素高达2000万像素,基本算是现在所有手机中的最高水平了。在设置相机分辨率的时候,一直纠结于4:3(20M)还是16:9(15M)。4:3的当然更高,成像质量也更好,论坛里也有类似的帖子,不过对于用户来说,似乎16:9看起来更顺眼一些,首先这是全屏的,给人的感觉比4:3广角更大,其次,照片在手机屏幕上也能全屏看。究竟哪个更好呢?本人特意在网上找到了一片帖子,结果一目了然,下面分享给大家:其实16:9看上去视角更宽一些,但是实际上就是4:3去掉上下的边裁出来的。也就是说,二者视角其实是一样的,但是4:3所包含的信息会更多一些。有信息在,你在电脑上想怎么处理就怎么处理,而用16:9就相当于白白浪费掉上下边的信息。当然16:9的好处是在手机上看着是全屏的,有人觉得好看些,仅此而已。下面还附带一组同一位置分别用4:3和16:9照的,看出差别了吧?4:3的尺寸实际包含的内容更多。先给大家展示一下拍照4:3和16:9的区别两张照片放在一起对比更加明显,4:3的更有优势
03-25 10:49
拿单反举例!16:9拍摄的画面左右方向宽点,高的方向的幅度会窄点,宽与高的比例为16:9,4:3的画面左右方向没有19:9的画面宽,高的方向的幅度比16:9画面的宽,宽与高的比例为4:3简单的说,前者画面宽点,高的方向窄点,后者比前者画面窄点,画面高的方向比前者宽点。你可以想象一下,16:9的画面其实是在4:3里面裁剪出来的,所以长边16的长度和原来的长边4是一样的,这样的话短边9就是原来的四分之三,自然比4:3小了。用手机拍照如果是要冲洗出来建议使用4:3的比例,应为大部分的照片都是这个比例的,或者和这个比例接近,裁剪相对会少一些。16:9只适合观看,冲洗时画面裁剪太大!
03-25 14:45
这问题问得不太专业,看来提问者是个摄影爱好者。要知道无论16:9或4:3 都是电视屏幕的尺寸比。而照片比例除了这2种,还有3:2。而且这个比例,恰恰又是照相机设定最多的比例。手机拍照原理和照相机相同,所以也是以3:2为好。当然,也可以按需要做其他设置。
03-25 19:42
这和最终显示端和用途有密切关系!用16:9的比例优点:如果你拍照最多用来显示诸如:手机端、pc端、或是用手机投影到大屏幕电视端(我就最多用这种方式与家人分享)。那末由于这些显示终端绝大多数都是或接近16:9。所以拍摄直接用16:9可以免得显示时两端留黑边,既占屏幕又不好看。包括最终用于制作视频也是16:9比例实用!这一点大家从电影电视的画面就能明白。用4:3画面比例拍摄:这是最大化拍摄器材本身像素的优势。一般来说无论任何数码设备,像素大小来自于本身的CMOS等感光片面积,而绝大多数感光片本身比例多为4:3或是3:2之类。先不说单反,就那你手机来说!在手机相机设置里最大分辨率显示的一般都是4:3,就是这个原因。它能充分发挥你相机的全部像素密度。最大化展现画面分辨率的优势!总结:无论什么比例!要看你最终用到什么方面:如果是手机、电视上显示直接拍16:9来的协调免得浏览带黑边。如果是存储最后用到编辑。最好拍4:3这样最大化了照片像素。因为你的再编辑可以进行裁切成不同比例,足可以应付一切用途。
05-30 17:09
16:9拍照视角更广,相同情况下能拍到的内容更多,但会产生广角畸变,因为现在的手机镜头光圈都非常大,小的有f2.2,f2.4最大的能到f1.8,大光圈最致命的就是广角畸变,就是图片的四周景物会被拉伸 。4:3照片可以避免一定的广角畸变,但是视角太小,我一般都用4:3的照片,发张图老铁们评价一下。
04-14 11:01
努比亚Z9去年拍摄玉龙雪山山脚下,原图1600万像素16:9画面,目前手机16:9的,是1200万像素,感觉被剪裁了一些。
05-30 17:55
看了这贴,马上跑出去用三脚架试了试。第一张16:9,第二张4:3,自己看有什么区别。4:3取景更广哦
04-27 18:37
对于这个问题,我感觉,拍风景的时候,我们可以选择16:9这个比例,画面更加的宽广,在拍人的时候我们需要选择4:3这个比例,防止人被拍扁了,谢谢
03-25 22:51
呦呵,纵拍4:3,横拍16:9。构图需要。你可以试试。4:3是中达画幅胶片的构图比例,比较古老,但出片耐看。16:9的构图压缩感强烈,也符合现在电视的画面比例,如风光片多余的蓝天就真多余,光角的宽度可以展现的宽阔场面,等等。根据需要选用。现在相机里面也提供了诸多的构图选择,还有1:1的,有修图软件就提供的更多了,可玩性很大。后期裁剪也是非常必要的,好图通过裁切达到重新构图的目的。当然,前期构图很重要,我就遇到裁无可裁的地步,非常棘手,因为再裁像素会受影响。
喜欢该文的人也喜欢与数码DC抗衡 1200万像素三星W880拍照八大亮点_网易手机
与数码DC抗衡 1200万像素三星W880拍照八大亮点
用微信扫码二维码
分享至好友和朋友圈
【搜娱网&评测】随着手机的技术不断成熟,手机聚合多功能早以不是什么稀奇的事情,然而,各大手机厂商为了展现自己的技术实力,将原有的聚合的功能进行更高的升级,其中发展最为迅速的乃是手机中的多媒体影音性能,同时也是满足了时下消费者对于高像素以及专业音乐享受的需求。在09年,手机在摄像头的配备上已经升级为千万级摄像头的大战,作为一只走在潮流尖端的三星电子,首款的1200万像素的M8910的诞生已经让我们兴奋不已,然而对于追求完美的三星电子来说,绝对不可能仅仅依靠一款千万级像素的手机来抢夺市场份额。
图为:1200万像素三星W880手机
即三星M8910推出之后,三星电子在9月份惊现了M8910的继任者三星W880,正式上市将命名为M8920,作为三星旗下最新的千万级拍照手机,三星W880在外观设计上更像是一款数码卡片DC,不仅具备了可伸缩式的镜头,同时还具备了我们仅在数码DC上才提供的快门拨动式转盘,由于三星W880在近日官方的图片放出,我们也迎来了海外版的大量真机图及实拍样张流出,下面,我们搜娱网为大家献上三星W880拍照八大亮点。
图为:1200万像素三星W880手机
亮点一:大气稳重的外观设计
作为三星M8910的继任者,三星W880在外观上使用了类似数码卡片DC的硬朗线条,方方正正的机身在边角处棱角感颇强,而黑色的优质磨砂材质机身看上去极为稳重,同时也有效避免了指纹的沾染。
图为:1200万像素三星W880手机
三星W880为了保持用户在拍照时持机的舒适性,该机在底部选用了皮革材质包裹,背部适度的凹凸设计,在单手持机拍照时,起到了定位手指的作用,不仅保证了用户持机拍照的舒适性,并且这种设计也可以确保取景拍照的稳定性,同时在拍照时有效防止脱手的可能。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
亮点二:伸缩式摄像头设计
关注拍照手机的用户相信都会有留意Altek的首款1200万像素手机A806,就是采用了伸缩式摄像头设计。而这款三星W880同样采用了伸缩式摄像头设计,先不论实际的拍照效果如何,就拿伸缩式镜头来讲,首先在视觉上就给人以专业的影像拍摄印象,尤其在摄像头嵌入的蓝色圆环,与三星蓝调的数码卡片DC设计吻合,也增添了一丝味道。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
三星W880的摄像头在启动和关闭相机功能时,将会自动伸出或者缩进,有效保护了摄像头被刮伤的可能,在镜头完全伸出的状态,与机身的距离大约在3cm左右,整个过程与数码卡片DC具备伸缩式摄像头的体验无二差异。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
亮点三:氙气闪光灯、LED补光灯、自动对焦灯一个也不少
为了保证用户专业级的拍照体验,三星W880在摄像头上部提供了氙气闪光灯、LED补光灯和自动对焦灯,在夜晚拍照时,为用户提供了更好的光线补充作用,即便在光线非常微弱的情况下,仍然可以保证被摄景物清晰的呈现。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
亮点四:数码卡片DC级别的拍照键
三星W880将拍照按键全部安置在机身右侧,通过专门的拍照启动键,即可激活相机功能,而且,该机在选用两节半段式的快门按键同时,在拍照快门键包裹的圆环乃是可以实现左右拨动的变焦拨钮,一改以往拍照手机选用与音量调节按键作为拍照的变焦按键,这些拍照功能按键的安置在体现三星W880所标榜的专业级影像手机的同时,也为用户在拍照时提供相当大的便利。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
亮点五:率先引入圆形快门/场景拨动转盘
三星W880在拍照的各样组件提供上,除了伸缩式的镜头配备,最为引人注意的便是该机率先引入了只有在数码DC中才有的圆形快门/场景拨动转盘,我们可以清楚的看到在这枚转盘上提供了P快门、微距、场景、远景、人物等标识,只要用户根据自己的需要,将转盘拨动至相应的位置,即可实现抓拍远景、人物或者微距等,从该机在拍照方面的各种配置,让我们对该机的实际拍照效果十分期待。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
亮点六:3.3英寸AMOLED高清显示屏
相比三星M8910,三星W800将屏幕可视面积升级为3.3英寸的AMOLED宽屏幕,分辨率为480&800像素,这块高清的显示屏幕不但具备色彩更真实艳丽、更省电以及优秀的视角显示,为全屏取景也获得了更宽裕的显示,同时也与市面上的数码DC显示屏尺寸拉近,做到真正与数码DC相抗衡的水平。
图为:1200万像素三星W880手机
图为:1200万像素三星W880手机
亮点七:更优秀的成像效果
身为新一代的影像手机,三星W880单从拍照组件的提供上,就已经显示出该机的强大,同时,此次我们在获得了该机的高清真机图的同时,也获得了该机在最高分辨下所拍摄的实拍样片,1200万像素最高支持拍摄分辨率的,提供了3倍光学变焦和6倍数码变焦,具备了镜头防抖、微笑识别、触控对叫以及追踪对焦等功能,那么该机的实际成像效果究竟如何呢?
图为:1200万像素三星W880手机
以下为三星W880在最大分辨率下的实拍样片(点击可放大)
室外风景样片
从以上室外样片中,三星W880的成像效果优秀,被摄物体色彩被真实还原,在细微之处刻画也清楚有致,锐度把握也非常到位,尽管在样片中具有较明显的噪点,但这与拍照当时的环境与相机具体的功能设置成正比,就实际成像效果而言,该机在室外风景方面的表现确实可圈可点。
室外微距样片
从以上室外微距样片中,三星W880的表现足可以达到震撼的效果,被摄物体色彩还原真实准确,对叶脉和花蕊深处的刻画非常细致清晰,对于虚化的表现也极为到位,这是笔者历经过对众多拍照手机进行微距体验后,唯一看到这样完美的手机微距拍摄效果。
室外变焦样片
得益于3倍光学变焦,三星W880在对远处景物的拍摄中,处理非常出色,以往仅支持数码变焦的影像手机,虽然也具备抓拍远处风景的能力,但在细节部分会有一定丢失现象,而三星W880对于远处风景把握及其到位,尽管在边缘之处也有虚边的情况,但细节部分丝毫没有丢失,让我们欣然的看到3倍光学变焦带来的抓拍远处风景的魅力。
拍照点评:作为三星旗下又一款千万级影像手机的W880,在实际拍照效果中,并没有让我们失望,出色的色彩还原能力以及细节上的细致表现,加之完善的拍照功能配备,足以媲美市面上千万级的数码DC。
亮点八:高清视频摄录及720P影片播放
三星W880除了具备强悍的静态照片拍摄外,在视频摄录方面,支持录制HD高清视频,分辨率为,同时,该机还具备播放720P视频的能力,包括MPEG4、H.263、AVI等主流的视频文件,你可以把网络上的众多高清电影下载下来存储到手机中直接播放,基于3.3英寸的宽屏幕,将取得非常舒适的视频观赏体验。
图为:1200万像素三星W880手机
与其说三星W880是一台手机,不如说它更像是一台数码相机。三星W880拥有1200万像素的摄像头,并支持3倍光学变焦,支持自动对焦并带有闪光灯,包括了专业的软硬件提供,这无疑将超越其他竞争对手,并提供了超强的与数码DC相抗衡的能力。三星W880的出现,将给热衷于拍照的用户一个很大的惊喜,带上它,就等于随身携带着一款傻瓜的数码DC,同时,该机具备的最高32GB Micro SDHC存储卡的扩展能力,也给用户存储大量照片提供强有力的后盾。
本文来源:搜娱网
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈91 条评论分享收藏感谢收起赞同 19532 条评论分享收藏感谢收起玩转Android Camera开发(四):预览界面四周暗中间亮,只拍摄矩形区域图片(附完整源码)
杂家前文曾写过一篇关于,只是比较简陋,在坐标的换算上不是很严谨,而且没有完成预览界面四周暗中间亮的效果,深以为憾,今天把这个补齐了。 在上代码之前首先交代下,这里面存在着换算的两种模式。第一种,是以屏幕上的矩形区域为基准进行换算。举个例子,屏幕中间一个 矩形框为100dip*100dip.这里一定要使用dip为单位,否则在不同的手机上屏幕呈现的矩形框大小不一样。先将这个dip换算成px,然后根据屏幕的宽和高的像素计算出矩形区域,传给Surfaceview上铺的一层View,这里叫MaskView(蒙板),让MaskView进行绘制。然后拍照时,通过屏幕矩形框的大小和屏幕的大小与最终拍摄图片的PictureSize进行换算,得到图片里的矩形区域图片,然后截取保存。第二种模式是,预先知道想要的图片的长宽,如我就是想截400*400(单位为px)大小的图片。那就以此为基准,换算出屏幕上呈现的Rect的长宽,然后让MaskView绘制。究竟用哪一种模式,按需选择。本文以第一种模式示例。下面上代码: 在杂家的基础上进行封装,首先封装一个MaskView,用来绘制四周暗中间亮的效果,或者你可以加一个滚动条,这都不是事。一、MaskView.javapackage org.yanzi.
import org.yanzi.util.DisplayU
import android.content.C
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.graphics.Paint.S
import android.graphics.P
import android.graphics.R
import android.util.AttributeS
import android.util.L
import android.widget.ImageV
public class MaskView extends ImageView {
private static final String TAG = "YanZi";
private Paint mLineP
private Paint mAreaP
private Rect mCenterRect =
private Context mC
public MaskView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initPaint();
mContext =
Point p = DisplayUtil.getScreenMetrics(mContext);
widthScreen = p.x;
heightScreen = p.y;
private void initPaint(){
//绘制中间透明区域矩形边界的Paint
mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mLinePaint.setColor(Color.BLUE);
mLinePaint.setStyle(Style.STROKE);
mLinePaint.setStrokeWidth(5f);
mLinePaint.setAlpha(30);
//绘制四周阴影区域
mAreaPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mAreaPaint.setColor(Color.GRAY);
mAreaPaint.setStyle(Style.FILL);
mAreaPaint.setAlpha(180);
public void setCenterRect(Rect r){
Log.i(TAG, "setCenterRect...");
this.mCenterRect =
postInvalidate();
public void clearCenterRect(Rect r){
this.mCenterRect =
int widthScreen, heightS
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Log.i(TAG, "onDraw...");
if(mCenterRect == null)
//绘制四周阴影区域
canvas.drawRect(0, 0, widthScreen, mCenterRect.top, mAreaPaint);
canvas.drawRect(0, mCenterRect.bottom + 1, widthScreen, heightScreen, mAreaPaint);
canvas.drawRect(0, mCenterRect.top, mCenterRect.left - 1, mCenterRect.bottom
+ 1, mAreaPaint);
canvas.drawRect(mCenterRect.right + 1, mCenterRect.top, widthScreen, mCenterRect.bottom + 1, mAreaPaint);
//绘制目标透明区域
canvas.drawRect(mCenterRect, mLinePaint);
super.onDraw(canvas);
说明如下:1、为了让这个MaskView有更好的适配型,里面设置变量mCenterRect,这个矩阵的坐标就是已经换算好的,对屏幕的尺寸进行适配过的,以全屏下的屏幕宽高为坐标系,不需要再换算了。2、当然这个MaskView是全屏的,这里修改下中的一个小问题,我将它的布局换成如下:&RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CameraActivity" &
&FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" &
&org.yanzi.camera.preview.CameraSurfaceView
android:id="@+id/camera_surfaceview"
android:layout_width="0dip"
android:layout_height="0dip" /&
&org.yanzi.ui.MaskView
android:id="@+id/view_mask"
android:layout_width="match_parent"
android:layout_height="match_parent" /&
&/FrameLayout&
&ImageButton
android:id="@+id/btn_shutter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dip"
android:background="@drawable/btn_shutter_background" /&
&/RelativeLayout& 更改的地方是让FrameLayout直接全屏,不要设置成wrap_content,如果设它为wrap,代码里调整Surfaceview的大小,而MaskView设为wrap的话,它会认为MaskView的长宽也是0.另外,让Framelayout全屏,在日后16:9和4:3切换时,可以通过设置Surfaceview的margin来调整预览布局的大小,所以预览的母布局FrameLayout必须全屏。 3.关于绘制阴影区域的代码里的+1 -1这几个小地方尽量不要错,按本文写就不会错。顺序是先绘制最上面、最下面、左侧、右侧四个区域的阴影。//绘制四周阴影区域
canvas.drawRect(0, 0, widthScreen, mCenterRect.top, mAreaPaint);
canvas.drawRect(0, mCenterRect.bottom + 1, widthScreen, heightScreen, mAreaPaint);
canvas.drawRect(0, mCenterRect.top, mCenterRect.left - 1, mCenterRect.bottom
+ 1, mAreaPaint);
canvas.drawRect(mCenterRect.right + 1, mCenterRect.top, widthScreen, mCenterRect.bottom + 1, mAreaPaint);二、在CameraActivity.java里封装两个函数: /**生成拍照后图片的中间矩形的宽度和高度
* @param w 屏幕上的矩形宽度,单位px
* @param h 屏幕上的矩形高度,单位px
private Point createCenterPictureRect(int w, int h){
int wScreen = DisplayUtil.getScreenMetrics(this).x;
int hScreen = DisplayUtil.getScreenMetrics(this).y;
int wSavePicture = CameraInterface.getInstance().doGetPrictureSize().y; //因为图片旋转了,所以此处宽高换位
int hSavePicture = CameraInterface.getInstance().doGetPrictureSize().x; //因为图片旋转了,所以此处宽高换位
float wRate = (float)(wSavePicture) / (float)(wScreen);
float hRate = (float)(hSavePicture) / (float)(hScreen);
float rate = (wRate &= hRate) ? wRate : hR//也可以按照最小比率计算
int wRectPicture = (int)( w * wRate);
int hRectPicture = (int)( h * hRate);
return new Point(wRectPicture, hRectPicture);
* 生成屏幕中间的矩形
* @param w 目标矩形的宽度,单位px
* @param h 目标矩形的高度,单位px
private Rect createCenterScreenRect(int w, int h){
int x1 = DisplayUtil.getScreenMetrics(this).x / 2 - w / 2;
int y1 = DisplayUtil.getScreenMetrics(this).y / 2 - h / 2;
int x2 = x1 +
int y2 = y1 +
return new Rect(x1, y1, x2, y2);
} 分别是生成图片的中间矩形的宽和高组成的一个Point,生成屏幕中间的矩形区域。两个函数的输入参数都是px为单位的屏幕中间矩形的宽和高。这里有个条件:矩形以屏幕中心为中心,否则的话计算公式要适当变换下。三、在开启预览后,就可以让MaskView绘制了 @Override
public void cameraHasOpened() {
// TODO Auto-generated method stub
SurfaceHolder holder = surfaceView.getSurfaceHolder();
CameraInterface.getInstance().doStartPreview(holder, previewRate);
if(maskView != null){
Rect screenCenterRect = createCenterScreenRect(DisplayUtil.dip2px(this, DST_CENTER_RECT_WIDTH)
,DisplayUtil.dip2px(this, DST_CENTER_RECT_HEIGHT));
maskView.setCenterRect(screenCenterRect);
} 这里有个注意事项:因为camera.open的时候是放在一个单独线程里的,open之后进行回调到cameraHasOpened()这里,那这个函数的执行时在主线程和子线程?答案也是在子线程,即子线程的回调还是在子线程里执行。正因此,在封装MaskView时set矩阵后用的是postInvalidate()进行刷新的。 public void setCenterRect(Rect r){
Log.i(TAG, "setCenterRect...");
this.mCenterRect =
postInvalidate();
}四、最后就是告诉拍照的回调了private class BtnListeners implements OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.btn_shutter:
if(rectPictureSize == null){
rectPictureSize = createCenterPictureRect(DisplayUtil.dip2px(CameraActivity.this, DST_CENTER_RECT_WIDTH)
,DisplayUtil.dip2px(CameraActivity.this, DST_CENTER_RECT_HEIGHT));
CameraInterface.getInstance().doTakePicture(rectPictureSize.x, rectPictureSize.y);
}上面是拍照的监听,在CameraInterface里重写一个doTakePicture函数: int DST_RECT_WIDTH, DST_RECT_HEIGHT;
public void doTakePicture(int w, int h){
if(isPreviewing && (mCamera != null)){
Log.i(TAG, "矩形拍照尺寸:width = " + w + " h = " + h);
DST_RECT_WIDTH =
DST_RECT_HEIGHT =
mCamera.takePicture(mShutterCallback, null, mRectJpegPictureCallback);
}这里出来个mRectJpegPictureCallback,它对应的类:/**
* 拍摄指定区域的Rect
PictureCallback mRectJpegPictureCallback = new PictureCallback()
//对jpeg图像数据的回调,最重要的一个回调
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
Log.i(TAG, "myJpegCallback:onPictureTaken...");
Bitmap b =
if(null != data){
b = BitmapFactory.decodeByteArray(data, 0, data.length);//data是字节数据,将其解析成位图
mCamera.stopPreview();
isPreviewing =
//保存图片到sdcard
if(null != b)
//设置FOCUS_MODE_CONTINUOUS_VIDEO)之后,myParam.set("rotation", 90)失效。
//图片竟然不能旋转了,故这里要旋转下
Bitmap rotaBitmap = ImageUtil.getRotateBitmap(b, 90.0f);
int x = rotaBitmap.getWidth()/2 - DST_RECT_WIDTH/2;
int y = rotaBitmap.getHeight()/2 - DST_RECT_HEIGHT/2;
Log.i(TAG, "rotaBitmap.getWidth() = " + rotaBitmap.getWidth()
+ " rotaBitmap.getHeight() = " + rotaBitmap.getHeight());
Bitmap rectBitmap = Bitmap.createBitmap(rotaBitmap, x, y, DST_RECT_WIDTH, DST_RECT_HEIGHT);
FileUtil.saveBitmap(rectBitmap);
if(rotaBitmap.isRecycled()){
rotaBitmap.recycle();
rotaBitmap =
if(rectBitmap.isRecycled()){
rectBitmap.recycle();
rectBitmap =
//再次进入预览
mCamera.startPreview();
isPreviewing =
if(!b.isRecycled()){
b.recycle();
};注意事项: 1、为了让截出的区域和屏幕上显示的完全一致,这里首先要满足PreviewSize长宽比、PictureSize长宽比、屏幕预览Surfaceview的长宽比为同一比例,这是个先决条件。然后再将屏幕矩形区域长宽换算成图片矩形区域时: /**生成拍照后图片的中间矩形的宽度和高度
* @param w 屏幕上的矩形宽度,单位px
* @param h 屏幕上的矩形高度,单位px
*/ private Point createCenterPictureRect(int w, int h){
int wScreen = DisplayUtil.getScreenMetrics(this).x;
int hScreen = DisplayUtil.getScreenMetrics(this).y;
int wSavePicture = CameraInterface.getInstance().doGetPrictureSize().y; //因为图片旋转了,所以此处宽高换位
int hSavePicture = CameraInterface.getInstance().doGetPrictureSize().x; //因为图片旋转了,所以此处宽高换位
float wRate = (float)(wSavePicture) / (float)(wScreen);
float hRate = (float)(hSavePicture) / (float)(hScreen);
float rate = (wRate &= hRate) ? wRate : hR//也可以按照最小比率计算
int wRectPicture = (int)( w * wRate);
int hRectPicture = (int)( h * hRate);
return new Point(wRectPicture, hRectPicture);
}原则上wRate 是应该等于hRate 的!!!!!!!!!! 2、我对CamParaUtil里的getPropPreviewSize和getPropPictureSize进行了更新,以前是以width进行判断的,这里改成了以height进行判断。因为在读取参数时得到的是800*480(宽*高)这种类型,一般高是稍微小的,所以以height进行判断。而这个高在最终显示和保存时经过旋转又成了宽。 public Size getPropPictureSize(List&Camera.Size& list, float th, int minHeight){
Collections.sort(list, sizeComparator);
int i = 0;
for(Size s:list){
if((s.height &= minHeight) && equalRate(s, th)){
Log.i(TAG, "PictureSize : w = " + s.width + "h = " + s.height);
if(i == list.size()){
i = 0;//如果没找到,就选最小的size
return list.get(i);
}最后来看下效果吧,我设定屏幕上显示的矩形尺寸为200dip*200dip, Camera预览的参数是以屏幕的比例进行自动寻找,预览尺寸的height不小于400,PictureSize的height不小于1300.
//设置PreviewSize和PictureSize
Size pictureSize = CamParaUtil.getInstance().getPropPictureSize(
mParams.getSupportedPictureSizes(),previewRate, 1300);
mParams.setPictureSize(pictureSize.width, pictureSize.height);
Size previewSize = CamParaUtil.getInstance().getPropPreviewSize(
mParams.getSupportedPreviewSizes(), previewRate, 400);
mParams.setPreviewSize(previewSize.width, previewSize.height); 可以看到单纯的截取是不改变图像分辨率的,注意真正的分辨率的概念并不等于xxx * xxx,图片放的越大越不清楚。稍后推出矩形区域可以移动、且可拉伸的,拍摄任意位置的特定区域图片demo。-------------------------------本文系原创,转载请注明作者:yanzi1225627代码下载链接:csdn:
没有更多推荐了,}

我要回帖

更多关于 拍照时屏幕没有显示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信