我通过
Intent intent = new Intent(); //调用照相机
intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
startActivity(intent);
调用手机照相机,那可不可以自己再重设置所拍照片的存储路径?
Intent intent = new Intent(); //调用照相机
intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
startActivity(intent);
调用手机照相机,那可不可以自己再重设置所拍照片的存储路径?
/*拍照的照片存储位置*/
private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera");
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
# public class CameraTest_4 extends Activity implements
# Callback, OnClickListener, AutoFocusCallback{
# SurfaceView mySurfaceView;//surfaceView声明
# SurfaceHolder holder;//surfaceHolder声明
# Camera myCamera;//相机声明
# String filePath="/sdcard/wjh.jpg";//照片保存路径
# boolean isClicked = false;//是否点击标识
# //创建jpeg图片回调数据对象
# PictureCallback jpeg = new PictureCallback() {
#
# @Override
# public void onPictureTaken(byte[] data, Camera camera) {
# // TODO Auto-generated method stub
# try
# {// 获得图片
# Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
# File file = new File(filePath);
# BufferedOutputStream bos =
# new BufferedOutputStream(new FileOutputStream(file));
# bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中
# bos.flush();//输出
# bos.close();//关闭
# }catch(Exception e)
# {
# e.printStackTrace();
# }
#
# }
# };
# /** Called when the activity is first created. */
# @Override
# public void onCreate(Bundle savedInstanceState) {
# super.onCreate(savedInstanceState);
# requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题
# //设置拍摄方向
# this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
# setContentView(R.layout.main);
# //获得控件
# mySurfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
# //获得句柄
# holder = mySurfaceView.getHolder();
# //添加回调
# holder.addCallback(this);
# //设置类型
# holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
# //设置监听
# mySurfaceView.setOnClickListener(this);
# }
# @Override
# public void surfaceChanged(SurfaceHolder holder, int format, int width,
# int height) {
# // TODO Auto-generated method stub
# //设置参数并开始预览
# Camera.Parameters params = myCamera.getParameters();
# params.setPictureFormat(PixelFormat.JPEG);
# params.setPreviewSize(640,480);
# myCamera.setParameters(params);
# myCamera.startPreview();
#
# }
# @Override
# public void surfaceCreated(SurfaceHolder holder) {
# // TODO Auto-generated method stub
# //开启相机
# if(myCamera == null)
# {
# myCamera = Camera.open();
# try {
# myCamera.setPreviewDisplay(holder);
# } catch (IOException e) {
# // TODO Auto-generated catch block
# e.printStackTrace();
# }
# }
#
# }
# @Override
# public void surfaceDestroyed(SurfaceHolder holder) {
# // TODO Auto-generated method stub
# //关闭预览并释放资源
# myCamera.stopPreview();
# myCamera.release();
# myCamera = null;
#
# }
# @Override
# public void onClick(View v) {
# // TODO Auto-generated method stub
# if(!isClicked)
# {
# myCamera.autoFocus(this);//自动对焦
# isClicked = true;
# }else
# {
# myCamera.startPreview();//开启预览
# isClicked = false;
# }
#
# }
# @Override
# public void onAutoFocus(boolean success, Camera camera) {
# // TODO Auto-generated method stub
# if(success)
# {
# //设置参数,并拍照
# Camera.Parameters params = myCamera.getParameters();
# params.setPictureFormat(PixelFormat.JPEG);
# params.setPreviewSize(640,480);
# myCamera.setParameters(params);
# myCamera.takePicture(null, null, jpeg);
# }
#
# }
# }
http://wjhhanbao.iteye.com/blog/1008511
File path = new File(mstrPath);
if(!path.exists())
path.mkdirs();
mstrFileName = Global.GetTime2() + ".jpg";
mstrFilePath = mstrPath + "/" + mstrFileName;
Log.e(Global.TAG, mstrFilePath);
File file = new File(mstrFilePath);
Uri uri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, 1);
这是我从网上找到关于焦距设置的方案就是手机上有个应用!它是可以实现变焦的!但是,我的应用不行;Camera.getParameters().isZoomSupported() -->true
Camera.getParameters().isSmoothZoomSupported() -->false这种情况下,我怎么才能实现变焦呢??我有两个手机:
A.moto me1 ZoomSupported和SmoothZoom都是支持的,我测试了,可以实现变焦!
B.HTC G8就是上面这种情况,ZoomSupported支持,SmoothZoom不支持,所以调用:Camera.startSmoothZoom(zoom)就没反应了,但是它手机上带了一个拍照程序,有变焦功能,说明SmoothZoom不支持的情况下应该也是可以实现变焦功能的!
我尝试了,使用
Camera.getParameters().setZoom(zoom);
或者:
Camera.Parameters localParameters = mCamera.getParameters();
mCamera.getParameters().set("taking-picture-zoom", zoom);
localParameters.set("taking-picture-zoom", zoom);
都没反应!
是不是改变了zoom后,还需要是操作???
另外我将,HTC自带的拍照程序反编译了一下,它代码里,没有发现调用过:
Camera.startSmoothZoom(zoom);
但是有发现,调用过:
Camera.Parameters localParameters = mCamera.getParameters();
mCamera.getParameters().set("taking-picture-zoom", zoom);
localParameters.set("taking-picture-zoom", zoom);
还有就是发现它用了一个.so的动态链接库!还有,Camera360这款软件,也实现了变焦!不知道他们是怎么实现的!!???请高手指教
我有两个问题。首先在onActivityResult中的Intent返回的是null,从而无法获取照片名字。而如果在全局声明这个名字,那么有时候相机拍照保存之后还会自动打开相机,又重新生成了一个新的名字,导致刚刚获取的名字丢失。不知道怎么解决呢?如果只是打开相机,在onActivityResult中定义名字路径,用bitmap保存,但是又有一个问题,图片被压缩的严重。我想得到原图