为啥适配的安卓7.0以上的监控摄像头电源适配器都无法对焦

梦想起航, 积分 10, 距离下一级还需 50 积分
主题帖子社区积分
机&&&&&&&型:魅族 MX5版&&&&&&&本:6.0.2.0A总签到数:1
轻松注册,让你轻松玩转Flyme社区
才可以下载或查看,没有帐号?
魅族MX5后置摄像头拍远景无法对焦,拍出的照片模糊,手动模式根本没用,求大神告知怎么解决?
2016纪念勋章2016年度评选纪念
2015纪念勋章2015年度评选纪念
MX2拥有MX2
MX3拥有MX3
MX4拥有MX4
MX4 Pro拥有MX4 Pro
魅蓝note拥有魅蓝note
魅蓝note 2拥有魅蓝note 2
MX5拥有MX5
开版纪念Flyme社区开版纪念勋章
关注新浪微博已关注官方新浪微博
关注微信已关注官方微信
解答解答组粗大事啦!苹果6S摄像头无法对焦怎么办?【显卡吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:3,224,278贴子:
粗大事啦!苹果6S摄像头无法对焦怎么办?收藏
点击屏幕没有任何对焦动作。远景一片模糊。
热销好货「天猫618」大牌尖货,限量特惠折上折,购物满就返红包,多买多得,不可错过!「天猫618」理想生活狂欢季,&嗨&购大品牌!
加钱买新的
怎么办,返厂能修吗?
能修。免费。拍拍能好
在保就送保吧,说不定还给你换
加钱买新的
免费返厂,貌似换新摄像头,上次6.p都召回了很多,貌似
无法对焦就是坏的,坏的就是废铁,废铁就应该砸掉
把景深关了就好了   --不用数了,这就是十分标准的十五字
你能截图吗?发个背面算什么事儿。
靠 刚才特意开了摄像头
,原来它会动啊
售后 ?﹏?ul﹍﹍                  愿用属于你的画笔,勾勒出最美的天空。     ﹏﹏﹏﹏﹏﹏﹏﹏﹏﹏?
还没过一年呢,赶快去修呗。上海, 上海环贸 iapm上海市徐汇区淮海中路 999 号环贸 iapm 商场上海, 南京东路上海市黄浦区南京东路 300 号上海, 浦东上海市浦东新区陆家嘴世纪大道 8 号上海国金中心 IFC 商场 LG2-27 号店铺上海, 环球港上海市普陀区中山北路 3300 号上海, 香港广场上海市黄浦区淮海中路 282 号香港广场北座北京, 三里屯北京市朝阳区三里屯路 19 号院三里屯太古里 6 号楼北京, 华贸购物中心北京市朝阳区建国路 81 号华贸购物中心北京, 朝阳大悦城北京市朝阳区朝阳北路 101 号北京, 王府井北京市东城区王府井大街 138 号北京 apm北京, 西单大悦城北京市西城区西单北大街 131 号大悦城南京, 南京艾尚天地南京市玄武区中山路 100 号南京, 虹悦城南京市雨花台区应天大街 619 号南宁, 南宁万象城南宁市青秀区民族大道 136 号厦门, 厦门新生活广场厦门市思明区嘉禾路 399 号SM 新生活广场大连, 大连恒隆广场大连市西岗区五四路 66 号大连, 百年城大连市中山区解放路 19 号天津, 天津大悦城天津市南开区南门外大街 2 号天津, 天津恒隆广场天津市和平区兴安路 166 号广州, 天环广场广州市天河区天河路 218 号成都, 成都万象城成都市成华区双庆路 8 号万象城成都, 成都太古里成都市锦江区中纱帽街 8 号无锡, 无锡恒隆广场无锡市崇安区人民中路 139 号杭州, 杭州万象城杭州市江干区富春路 701 号杭州, 西湖杭州市上城区平海路 100 号沈阳, 中街大悦城沈阳市大东区小东路 5 号沈阳, 沈阳万象城沈阳市和平区青年大街 288 号济南, 济南恒隆广场济南市历下区泉城路 188 号深圳, 深圳益田假日广场深圳市南山区深南大道 9028 号益田假日广场福州, 泰禾广场福州市晋安区竹屿路 6 号东二环泰禾城市广场郑州, 郑州万象城郑州市二七区民主路 10 号重庆, 解放碑重庆市渝中区邹容路 108 号重庆, 重庆万象城重庆市九龙坡区谢家湾正街 55 号重庆, 重庆北城天街重庆市江北区北城天街 8 号青岛, 青岛万象城青岛市市南区山东路 6A 号
我一师兄的美版也遇到这问题了,昨天还拿去花钱修了,他说他那个是一个批次的问题
有保修走售后 没保修自己换个 6P之前很多也是这个情况
坏了 该咋就咋
苹果能出这样的问题,又不是安卓机
截图很难?
登录百度帐号&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Android 系统中camera中 自动对焦的解决方案
摘要:关于camera中自动对焦的解决方案和框架流程,在此总结一下。freescale平台的AndroidCamera很多功能都没有实现;驱动里面也是;HAL层也是;因为工作需要;添加了自动对焦和白平衡功能;测试OK;在这里把主要修改的地方写出来;希望以后遇到的朋友可以少走弯路;首先是AndroidHAL层:android/hardware/imx/mx6/libcamera/CameraModule.cpp=&这个文件和再往上层的代码都不用修改;作为你看Camera代码的开
关于camera中 自动对焦的解决方案 和 框架流程,在此总结一下。
freescale平台的Android Camera很多功能都没有实现;驱动里面也是;HAL层也是;因为工作需要;添加了自动对焦和白平衡功能;测试OK;在这里把主要修改的地方写出来;希望以后遇到的朋友可以少走弯路;
首先是Android HAL层: android/hardware/imx/mx6/libcamera/CameraModule.cpp =&这个文件和再往上层的代码都不用修改;作为你看Camera代码的开始;android/hardware/imx/mx6/libcamera/CameraHal.cpp =&主要修改这个文件;很多功能都是没有实现;android/hardware/imx/mx6/libcamera/CaptureDeviceInterface.cpp =&是调用V4L2层的;所有Camera V4L2设备都继承它;要改;android/hardware/imx/mx6/libcamera/V4l2CapDeviceBase.cpp =&这个文件是你要添加功能V4L2具体实现;要改;android/hardware/imx/mx6/libcamera/V4l2CsiDevice.cpp =&这个文件不需要修改;
Android kernel driver层: kernel/drivers/media/video/mxc/capture/mxc_v4l2_capture.c =&需要修改;因为V4L2协议传下来的命令首先到了这个文件;等于是Camera master设备;kernel/drivers/media/video/mxc/capture/ov5640.c =&这个文件就是具体的驱动代码;实现你接收的V4L2命令然后去控制Camera做什么;
Android camera HAL四个callback
其中包括: camera_notify_callback
用来传递一些消息: 如快门消息,自动对焦完成消息,出错消息,拍照编码结束等
参数@msg_type可以是: CAMERA_MSG_ERRORCAMERA_MSG_SHUTTERCAMERA_MSG_FOCUSCAMERA_MSG_ZOOMCAMERA_MSG_FOCUS_MOVE
Android Camera框架
Camera从驱动到应用
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
邮箱低至5折
推荐购买再奖现金,最高25%
&200元/3月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Android 系统中camera中 自动对焦的解决方案相关信息,包括
的信息,所有Android 系统中camera中 自动对焦的解决方案相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International博客分类:
最近需要做手机拍照【两种方式:调用系统相机(博客最后);自己写照相机布局】,预览,上传功能。特地研究了下android的手机拍照。
参考地址:
1、上传文件功能网上很多讲的,只要细心点,按照格式来写发送的数据,都是没有问题的。
2、预览使用Gallery和ImageSwitcher就行,我做的很简单(参考代码)。
----------------------------------------------------------------------------------------------------------------------
修改内容:
1、照相功能使用系统自带照相机(自己写的照相机属性设置根据不同照相机会有问题,所以舍弃)
2、预览功能不再使用Gallery+ImageS实用性不强,并且显示慢且卡。改用异步加载
3、上传图片时,对图片进行压缩,增加上传速度。
4、长按gridView进入编辑模式,批量删除图片。参考;
5、今天又做修改,之前写的压缩图片方法的竟然会变形(没有测试大的图片),修改后不会变形了。
以此,希望能做到最好的用户体验。
附上流程图:
拍照功能:【预览尺寸有知道的朋友留言告知。】
* @author Administrator
public class TakePhotoAct extends Activity implements SurfaceHolder.Callback{
private static String imgPath = Environment.getExternalStorageDirectory().getPath() + "/"+Const.imageD
private SurfaceView surfaceV
//相机画布
private SurfaceHolder surfaceH
private Button takePicView,exitV
private Camera mC
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//这里我在AndroidManifest.xml的activity中添加了android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
* 隐藏状态栏和标题栏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
* 获取Button并且设置事件监听
takePicView = (Button)this.findViewById(R.id.takepic);
takePicView.setOnClickListener(TakePicListener);
exitView = (Button)this.findViewById(R.id.exit);
exitView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
surfaceView = (SurfaceView)this.findViewById(R.id.surface_camera);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
checkSoftStage();
//首先检测SD卡是否存在
* 检测手机是否存在SD卡,网络连接是否打开
private void checkSoftStage(){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//判断是否存在SD卡
String rootPath = Environment.getExternalStorageDirectory().getPath();
//获取SD卡的根目录
File file = new File(imgPath);
if(!file.exists()){
file.mkdir();
new AlertDialog.Builder(this).setMessage("检测到手机没有存储卡!请插入手机存储卡再开启本应用。")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).show();
* 点击拍照按钮,启动拍照
private final OnClickListener TakePicListener = new OnClickListener(){
public void onClick(View v) {
mCamera.autoFocus(new AutoFoucus());
//自动对焦
* 自动对焦后拍照
* @author aokunsang
private final class AutoFoucus implements AutoFocusCallback{
public void onAutoFocus(boolean success, Camera camera) {
if(success && mCamera!=null){
mCamera.takePicture(mShutterCallback, null, mPictureCallback);
* 重点对象、 此处实例化了一个本界面的PictureCallback
* 当用户拍完一张照片的时候触发,这时候对图片处理并保存操作。
private final PictureCallback mPictureCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
String fileName = System.currentTimeMillis()+".jpg";
File file = new File(imgPath,fileName);
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bm.compress(Bitmap.CompressFormat.JPEG, 60, bos);
bos.flush();
bos.close();
Intent intent = new Intent(TakePhotoAct.this,PictureViewAct.class);
intent.putExtra("imagePath", file.getPath());
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
* 在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件,
* 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动
private final ShutterCallback mShutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d("ShutterCallback", "...onShutter...");
* 初始化相机参数,比如相机的参数: 像素, 大小,格式
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters param = mCamera.getParameters();
* 设置拍照图片格式
param.setPictureFormat(PixelFormat.JPEG);
* 设置预览尺寸【这里需要注意:预览尺寸有些数字正确,有些会报错,不清楚为啥】
//param.setPreviewSize(320, 240);
* 设置图片大小
param.setPictureSize(Const.width, Const.height);
mCamera.setParameters(param);
* 开始预览
mCamera.startPreview();
* 打开相机,设置预览
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
//打开摄像头
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
mCamera.release();
* 预览界面被关闭时,或者停止相机拍摄;释放相机资源
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
if(mCamera!=null) mCamera.release();
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_CAMERA){
//按下相机实体按键,启动本程序照相功能
mCamera.autoFocus(new AutoFoucus());
//自动对焦
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
&SurfaceView
android:id="@+id/surface_camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
&LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"&
android:text="拍照"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/takepic"
android:text="退出"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/exit"
&/LinearLayout&
&/LinearLayout&
预览功能:
* 图片预览
* @author: aokunsang
public class PictureScanAct extends Activity {
private GridView gridV
private ImageAdapter imgA
private List&String& fileNameList = new ArrayList&String&();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picturescan);
gridView = (GridView)findViewById(R.id.picture_grid);
imgAdapter = new ImageAdapter(this);
gridView.setAdapter(imgAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view,
int position, long id) {
String fileName = fileNameList.get(position);
startActivity(new Intent(PictureScanAct.this, PictureViewAct.class).putExtra("flag","upload").putExtra("imagePath",fileName));
//setProgressBarIndeterminateVisibility(true);
Toast.makeText(this, "加载图片中....", Toast.LENGTH_LONG).show();
new AsyncLoadedImage().execute();
* 向适配器添加图片
* @param bitmap
private void addImage(Bitmap... loadImages){
for(Bitmap loadImage:loadImages){
imgAdapter.addPhoto(loadImage);
* 释放内存
protected void onDestroy() {
super.onDestroy();
final GridView grid = gridV
final int count = grid.getChildCount();
ImageView v =
for (int i = 0; i & i++) {
v = (ImageView) grid.getChildAt(i);
((BitmapDrawable) v.getDrawable()).setCallback(null);
* 异步加载图片展示
* @author: aokunsang
class AsyncLoadedImage extends AsyncTask&Object, Bitmap, Boolean& {
protected Boolean doInBackground(Object... params) {
File fileDir = new File(Const.imgPath);
File[] files = fileDir.listFiles();
boolean result =
if(files!=null){
for(File file:files){
String fileName = file.getName();
if (fileName.lastIndexOf(".") & 0
&& fileName.substring(fileName.lastIndexOf(".") + 1,
fileName.length()).equals("jpg")){
Bitmap newB
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 10;
bitmap = BitmapFactory.decodeFile(file.getPath(), options);
newBitmap = ThumbnailUtils.extractThumbnail(bitmap, 100, 100);
bitmap.recycle();
if (newBitmap != null) {
fileNameList.add(file.getPath());
publishProgress(newBitmap);
} catch (Exception e) {
e.printStackTrace();
public void onProgressUpdate(Bitmap... value) {
addImage(value);
protected void onPostExecute(Boolean result) {
if(!result){
showDialog(1);
protected Dialog onCreateDialog(int id) {
AlertDialog dialog = new AlertDialog.Builder(PictureScanAct.this).setTitle("温馨提示").setMessage("暂时还没有照片,请先采集照片!")
.setPositiveButton("确定", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(PictureScanAct.this,TakePhotoAct.class));
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).show();
GridView适配器:
public class ImageAdapter extends BaseAdapter {
private List&Bitmap& picList = new ArrayList&Bitmap&();
private Context mC
public ImageAdapter(Context mContext){
this.mContext = mC
public int getCount() {
return picList.size();
/* (non-Javadoc)
* @see android.widget.Adapter#getItem(int)
public Object getItem(int position) {
// TODO Auto-generated method stub
return picList.get(position);
* 添加图片
* @param bitmap
public void addPhoto(Bitmap loadImage){
picList.add(loadImage);
notifyDataSetChanged();
/* (non-Javadoc)
* @see android.widget.Adapter#getItemId(int)
public long getItemId(int position) {
// TODO Auto-generated method stub
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView =
if(convertView == null){
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(110, 110));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(5,5,5,5);
imageView = (ImageView)convertV
imageView.setImageBitmap(picList.get(position));
return imageV
图片预览界面:
&?xml version="1.0" encoding="utf-8"?&
&GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/picture_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"
android:verticalSpacing="5dip"
android:horizontalSpacing="5dip"
android:stretchMode="columnWidth"
android:columnWidth="120dip"
android:gravity="center"
&/GridView&
预览图片:
上传工具类:
import java.io.BufferedR
import java.io.DataOutputS
import java.io.FileInputS
import java.io.InputS
import java.io.InputStreamR
import java.net.HttpURLC
import java.net.URL;
import java.util.M
import java.util.Map.E
import android.util.L
import com.peacemap.photo.po.FileI
* POST上传文件
* @author aokunsang
public class PostFile {
private static PostFile postFile = new PostFile();
private final static String LINEND = "\r\n";
private final static String BOUNDARY = "---------------------------7da"; //数据分隔线
private final static String PREFIX = "--";
private final static String MUTIPART_FORMDATA = "multipart/form-data";
private final static String CHARSET = "utf-8";
private final static String CONTENTTYPE = "application/octet-stream";
private PostFile(){}
public static PostFile getInstance(){
return postF
* HTTP上传文件
* @param actionUrl
请求服务器的路径
* @param params
传递的表单内容
* @param files
多个文件信息
public String post(String actionUrl,Map&String,String& params,FileInfo[] files){
URL url = new URL(actionUrl);
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
urlConn.setDoOutput(true);
//允许输出
urlConn.setDoInput(true);
//允许输入
urlConn.setUseCaches(false);
urlConn.setRequestMethod("POST");
urlConn.setRequestProperty("connection", "Keep-Alive");
urlConn.setRequestProperty("Charset", CHARSET);
urlConn.setRequestProperty("Content-Type", MUTIPART_FORMDATA+";boundary="+BOUNDARY);
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
//构建表单数据
String entryText = bulidFormText(params);
Log.i("-------描述信息---------------", entryText);
dos.write(entryText.getBytes());
StringBuffer sb = new StringBuffer("");
for(FileInfo file : files){
sb.append(PREFIX).append(BOUNDARY).append(LINEND);
sb.append("Content-Disposition: form- name=\""+file.getFileTextName()+"\"; filename=\""+file.getFile().getAbsolutePath()+"\""+LINEND);
sb.append("Content-Type:"+CONTENTTYPE+";charset="+CHARSET+LINEND);
sb.append(LINEND);
dos.write(sb.toString().getBytes());
InputStream is = new FileInputStream(file.getFile());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
dos.write(buffer, 0, len);
is.close();
dos.write(LINEND.getBytes());
//请求的结束标志
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
dos.write(end_data);
dos.flush();
//-----------------------------------
发送请求数据结束
----------------------------
//----------------------------------
接收返回信息 ------------------------
int code = urlConn.getResponseCode();
if(code!=200){
urlConn.disconnect();
return "";
BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String result = "";
String line =
while((line = br.readLine())!=null){
br.close();
urlConn.disconnect();
} catch (Exception e) {
Log.e("--------上传图片错误--------", e.getMessage());
* HTTP上传单个文件
* @param actionUrl
请求服务器的路径
* @param params
传递的表单内容
* @param files
单个文件信息
public String post(String actionUrl,Map&String,String& params,FileInfo fileInfo){
return post(actionUrl, params, new FileInfo[]{fileInfo});
* 封装表单文本数据
* @param paramText
private String bulidFormText(Map&String,String& paramText){
if(paramText==null || paramText.isEmpty()) return "";
StringBuffer sb = new StringBuffer("");
for(Entry&String,String& entry : paramText.entrySet()){
sb.append(PREFIX).append(BOUNDARY).append(LINEND);
sb.append("Content-Disposition:form-name=\""
+ entry.getKey() + "\"" + LINEND);
sb.append("Content-Type:text/charset=" + CHARSET + LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
return sb.toString();
* 封装文件文本数据
* @param files
private String buildFromFile(FileInfo[] files){
StringBuffer sb = new StringBuffer();
for(FileInfo file : files){
sb.append(PREFIX).append(BOUNDARY).append(LINEND);
sb.append("Content-Disposition: form- name=\""+file.getFileTextName()+"\"; filename=\""+file.getFile().getAbsolutePath()+"\""+LINEND);
sb.append("Content-Type:"+CONTENTTYPE+";charset="+CHARSET+LINEND);
sb.append(LINEND);
return sb.toString();
上传图片时对图片进行压缩处理(压缩处理程序):
* 压缩图片上传
* @param picPath
private synchronized File compressPicture(String picPath){
int maxWidth = 640,maxHeight=480;
//设置新图片的大小
String fileName = picPath.substring(picPath.lastIndexOf("/"));
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds =
Bitmap image = BitmapFactory.decodeFile(picPath, options);
double ratio = 1D;
if (maxWidth & 0 && maxHeight &= 0) {
// 限定宽度,高度不做限制
ratio = Math.ceil(options.outWidth / maxWidth);
} else if (maxHeight & 0 && maxWidth &= 0) {
// 限定高度,不限制宽度
ratio = Math.ceil(options.outHeight / maxHeight);
} else if (maxWidth & 0 && maxHeight & 0) {
// 高度和宽度都做了限制,这时候我们计算在这个限制内能容纳的最大的图片尺寸,不会使图片变形
double _widthRatio = Math.ceil(options.outWidth / maxWidth);
double _heightRatio = (double) Math.ceil(options.outHeight / maxHeight);
ratio = _widthRatio & _heightRatio ? _widthRatio : _heightR
if (ratio & 1)
options.inSampleSize = (int)
options.inJustDecodeBounds =
options.inPreferredConfig = Bitmap.Config.RGB_565;
image = BitmapFactory.decodeFile(picPath, options);
//保存入sdCard
File file = new File(Const.thumbnailPath+fileName);
FileOutputStream out = new FileOutputStream(file);
if(image.compress(Bitmap.CompressFormat.JPEG, 100, out)){
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
return new File(picPath);
if(image!=null && !image.isRecycled()){
image.recycle();
-------------------------------------我是个华丽的分割线,哇哈哈-----------------------------------------------
做完这个拍照后,感觉功能太简单,比如:设置图片大小,白天夜晚照相等等一些系统照相机带的功能都没有,因此用在项目中感觉不炫。 然后就用了简单点的,直接调用系统照相机了。本来想着简单呢,后来也遇到点问题。
(1)根据Camera Activity返回的时候,会带一个名为data的Bitmap对象,照片的缩略图(这个地方可以做各种修改,我没用到不说了),上代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkSoftStage();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
} catch (Exception e) {
e.printStackTrace();
* 检测手机是否存在SD卡,网络连接是否打开
private void checkSoftStage(){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//判断是否存在SD卡
File file = new File(imgPath);
if(!file.exists()){
file.mkdir();
new AlertDialog.Builder(this).setMessage("检测到手机没有存储卡!请插入手机存储卡再开启本应用。")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).show();
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (resultCode == TAKE_PICTURE)
拍照Activity保存图像数据的key是data,返回的数据类型是Bitmap对象
Bitmap cameraBitmap = (Bitmap) data.getExtras().get("/sdcard/rtest.jpg");
在ImageView组件中显示拍摄的照片
image.setImageBitmap(cameraBitmap);
// 做自己的业务操作。。。。
super.onActivityResult(requestCode, resultCode, data);
(2)以上代码在我的小米手机上测试时,出现问题了。 返回的name为data的Bitmap对象是个Null,我发现小米照完相片之后,他会先跳到一个预览的界面(系统自带的页面),所以得不到Bitmap对象了。
因此我就先保存照片以及其路径,然后在onActivityResult中获取图片,做业务操作,代码如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkSoftStage();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
} catch (Exception e) {
e.printStackTrace();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String fileName = System.currentTimeMillis()+".jpg";
newImgPath = imgPath + "/" + fileN
Uri uri = Uri.fromFile(new File(imgPath,fileName));
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, TAKE_PICTURE);
} catch (Exception e) {
e.printStackTrace();
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
Log.i("--------图片路径---------", "------"+newImgPath+"---------");
//.....做一些业务操作
} catch (Exception e) {
e.printStackTrace();
super.onActivityResult(requestCode, resultCode, data);
浏览 30977
楼主好人,可否发一份源码亲,不好意思。这个是我在项目中摘出来的部分备忘的,源码逻辑复杂了点,不能外放。
[/** 139.&&&& * 设置预览尺寸【这里需要注意:预览尺寸有些数字正确,有些会报错,不清楚为啥】 140.&&&& */& 141.&&& //param.setPreviewSize(320, 240);& }宽和高可以通过如下方式获取,不知道是不是你想要的那样WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
// 获取屏幕的宽和高
screenWidth = display.getWidth();
screenHeight = display.getHeight();你好,你这是获取屏幕的宽和高,应该跟它没关系。我认为这个预览尺寸是每个手机系统摄像头内置的预览和照相的大小,比如:320*480,600*800等、
你好,博主,我想做一个这样的界面,能否将系统摄像头的照相VIEW进行修改?或者是在那个界面新添加一些东西?系统摄像机貌似不能改动的吧,没有spring那样可以随意扩展吧、兄台可以研究下。当然就算可以,那你也需要针对每个手机进行更改,毕竟照相机这玩意,每个手机绝对是不一样的。
楼主,怎么没有项目附件呢,好人到底啊哎呀,哥哥,这个真没有demo,都是做项目时候自己解决问题后备忘的。项目肯定不能发布出去了。&
以上这些代码组装后,基本上已经可以使用了,根据自己的需要修改下,就行了。又没那么难
& 上一页 1
浏览: 681157 次
来自: 北京
感谢 tomcat8改成7就好了
不错,谢谢分享!推荐个参考视频内容:http://www.ro ...
完全正确,补充一下&beans:bean id=&quo ...
longToip直接用ipToLong反过来就好了 publi ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 监控摄像头电源适配器 的文章

更多推荐

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

点击添加站长微信