- 浏览: 465278 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
bewithme:
我把一个透明背景的PNG画到了另外一张图片上,为啥透明背景就变 ...
Java绘制PNG图片时的黑色背景问题 -
davidwkj:
Y坐标的公式不对。算出来的值是错的!!!!!!!!!!!!!! ...
两条线段是否相交,计算交点公式。 -
zhang9181156:
茅塞顿开哈,感谢
android--相机开发 -
leecinwell:
哈
Android条用照相机,实现可剪切功能 -
life_菜鸟飞:
非常感谢作者这么详细的讲解,自己也动手实践了一下,发现前面几个 ...
android--相机开发
public class CameraActivity extends Activity {
CameraView cameraView;
Button btnOpenCamera, btnShowPhoto, btnHelp;
int markView = 0;
boolean isMarkImageShow = false;
/*用来标识请求照相功能的activity*/
private static final int CAMERA_WITH_DATA = 3023;
/*用来标识请求gallery的activity*/
private static final int PHOTO_PICKED_WITH_DATA = 3021;
private File mCurrentPhotoFile;//照相机拍照得到的图片
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.camera);
cameraView = new CameraView(this);
initButtons();
}
public void initButtons(){
btnOpenCamera = (Button)findViewById(R.id.camera_open);
btnShowPhoto = (Button)findViewById(R.id.camera_show_photo);
btnHelp = (Button)findViewById(R.id.camera_help);
btnOpenCamera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// setContentView(cameraView);
// cameraView.requestFocus();
// cameraView.setFocusable(true);
// Intent intent = new Intent();
// intent.setClass(CameraActivity.this, CameraOpenActivity.class);
// intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
// startActivity(intent);
doTakePhoto();
}
});
btnShowPhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Intent intent = new Intent();
// intent.setClass(CameraActivity.this, ShowPictureActivity.class);
// startActivity(intent);
// finish();
doPickPhotoFromGallery();
}
});
btnHelp.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
}
/**
* 拍照获取图片
*
*/
protected void doTakePhoto() {
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator + "ToolBoxfiles";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
if (dir.exists()) {
try {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyy-MM-dd_HH-mm-ss");
String fileName = dateFormat.format(date) + ".jpg";
mCurrentPhotoFile = new File(path, fileName);
Uri u = Uri.fromFile(mCurrentPhotoFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE,
null);
intent.putExtra(MediaStore.EXTRA_OUTPUT, u);
startActivityForResult(intent, CAMERA_WITH_DATA);
} catch (Exception e) {
// TODO: handle exception
Toast.makeText(this, "--doTakePhoto--", Toast.LENGTH_LONG).show();
}
}
}
protected void doCropPhoto(File f) {
try {
// 启动gallery去剪辑这个照片
final Intent intent = getCropImageIntent(Uri.fromFile(f));
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
} catch (Exception e) {
Toast.makeText(this, "--doCropPhoto--", Toast.LENGTH_LONG).show();
}
}
/**
* Constructs an intent for image cropping. 调用图片剪辑程序
*/
public static Intent getCropImageIntent(Uri photoUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
// 请求Gallery程序
protected void doPickPhotoFromGallery() {
try {
// Launch picker to choose photo for selected contact
final Intent intent = getPhotoPickIntent();
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "doPickPhotoFromGallery",
Toast.LENGTH_LONG).show();
}
}
// 封装请求Gallery的intent
public static Intent getPhotoPickIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case PHOTO_PICKED_WITH_DATA: {// 调用Gallery返回的
final Bitmap photo = data.getParcelableExtra("data");
// ImageView imageView = new ImageView(this);
ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(photo);
// this.setContentView(imageView);
// isMarkImageShow = true;
// 下面就是显示照片了
// System.out.println(photo);
//缓存用户选择的图片
// img = getBitmapByte(photo);
// mEditor.setPhotoBitmap(photo);
// System.out.println("set new photo");
break;
}
case CAMERA_WITH_DATA: {// 照相机程序返回的,再次调用图片剪辑程序去修剪图片
doCropPhoto(mCurrentPhotoFile);
break;
}
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
if(isMarkImageShow){
// isMarkImageShow = false;
// this.setContentView(R.layout.camera);
}else{
Intent intent = new Intent();
intent.setClass(CameraActivity.this, ToolBoxActivity.class);
startActivity(intent);
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
自己写的照相机,还有待改进
public class CameraOpenActivity extends Activity {
/** Called when the activity is first created. */
private SurfaceView surfaceView;
private Button buttonTakePhoto, buttonGoBack, buttonShowPicture;
private Camera camera;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 设置横屏
// this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_BEHIND);// 设置横屏
// requestWindowFeature(Window.FEATURE_NO_TITLE);// 没有标题
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
// WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 屏幕亮度的持续
setContentView(R.layout.camera_open);
surfaceView = (SurfaceView) this.findViewById(R.id.surface_view);
// surfaceView.set
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// surface.getHolder().setFixedSize(176, 144);
surfaceView.getHolder().addCallback(new SurfaceCallback());
initButtons();
}
public void initButtons() {
buttonTakePhoto = (Button) findViewById(R.id.button_take_photo);
buttonTakePhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 停止预览
takePic();
}
});
buttonShowPicture = (Button) findViewById(R.id.button_show_picture);
buttonShowPicture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
buttonGoBack = (Button) findViewById(R.id.button_go_back);
buttonGoBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(CameraOpenActivity.this, CameraActivity.class);
startActivity(intent);
finish();
}
});
}
private class SurfaceCallback implements Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
// 获取相机参数
Camera.Parameters parameters = camera.getParameters();
// 设置照片大小
parameters.setPreviewSize(width, height);
// 设置照片格式
parameters.setPictureFormat(PixelFormat.JPEG);
// 设置相机参数
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
// 停止预览
camera.stopPreview();
// 释放相机资源
if (camera != null)
camera.release();
camera = null;
}
}
// 执行保存照片任务
Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
new SavePictureTask().execute(data);
camera.startPreview();
}
};
class SavePictureTask extends AsyncTask<byte[], String, String> {
@Override
protected String doInBackground(byte[]... params) {
// TODO Auto-generated method stub
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator + "ToolBoxfiles";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
if (dir.exists()) {
try {
File file = new File(path, System.currentTimeMillis()
+ ".jpg");
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write(params[0]);
outputStream.close();
camera.startPreview();
} catch (Exception e) {
// TODO: handle exception
}
}
return null;
}
}
// 拍照方法
public void takePic() {
// 停止预览
camera.stopPreview();
// 拍照
camera.takePicture(null, null, pictureCallback);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
Intent intent = new Intent();
intent.setClass(CameraOpenActivity.this, CameraActivity.class);
startActivity(intent);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
发表评论
-
浅析android应用增量升级
2013-05-29 13:31 2684背景 随着android应用体积的不断增大 ... -
Activity是如何生成一个 view 的
2013-05-16 11:09 1320Activity是一个工人,它来控制Window;Windo ... -
Android 获取新浪天气预报数据
2012-12-07 13:07 3013新浪天气预报地址: http://php.weathe ... -
Android连接网络问题
2012-11-23 11:14 1939一、检查网络是否连接 方法一、 publ ... -
Android异步下载图片并且缓存图片到本地
2012-09-06 16:21 1877转来的,以备不时之需!! 在Android开发中 ... -
android--相机开发
2012-08-10 08:17 11471在android中应用相机功能,一般有两种:一种是直接调 ... -
15个令人震惊的HTML5效果
2012-07-04 10:09 130715个令人震惊的HTML5效果 除非你一直 ... -
Android 读写文件的N种写法
2012-07-04 09:54 1081Android 读写文件的N种写法(待续。。。) ... -
如何干掉360(付代码)
2012-06-29 16:09 1343最近360很凶,有推送的,有桌面图标的,全部会被提示有风 ... -
Cocos2d-x跨Android&iOS平台开发入门
2012-06-26 10:22 1505好吧,确实存在这 ... -
解决Android加载图片时内存溢出的问题
2012-06-18 13:52 46301尽量不要使用setImageBitmap或setImag ... -
android 代码 混淆
2012-06-04 10:22 20351、得到 classes.dex文件;直接用你机器上的 ... -
android代码混淆是出现Conversion to Dalvik format failed with error 1的解决方法
2012-06-04 10:18 4468最近做android项目,给代码混淆时遇到问题,在项目加入混淆 ... -
Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
2012-03-20 16:44 1846一、Surface Surface就是“表面”的意思。 ... -
Re-installation failed解决方法
2011-12-27 22:49 4787我的方法:去模拟器卸载上次安装的*.apk ... -
Failed to install *.apk on device 'emulator-5554': timeout
2011-12-20 00:31 9287错误提示: Failed to inst ... -
android 中的 Bitmap
2011-12-20 00:32 3907在Android SDK中说明可以支持的图片格式如下:p ... -
Android 小球重力感应实现
2011-12-16 20:49 1613重力感应主要是依靠手机的加速度传感器(acceleromete ... -
Android中资源文件夹res/raw和assets的使用
2011-12-16 20:37 9533*res/raw和assets的相同点: 1.两者目录 ... -
为不同分辨率的手机创建界面
2011-12-16 20:36 14381,首先进入res 文件夹下。 2,创建一个名为“la ...
相关推荐
android 调用系统照相机功能 ,包括摄像机视频调用
自定义Android照相机,实现只拍摄矩形区域.完美解决预览及拍照时的照片拉伸失真,旋转等问题
Android自定义照相机实现.docx
Android4.0.3系统照相机源码。
Android开发之拍照功能实现(附源码)
android照相机应用源码,可以直接运行
安卓实现自定义相机,可以拍照存储到手机中,可根据需求自行修改
android 简易camera相机,可以实现简单的拍照 & preview功能
Android代码编写的照相机Demo 基本功能已经实现 不过只能将拍的照片存到SD卡 还未实现存入手机相册 适合刚学Android的童鞋
Android源码——调用系统相册和系统照相机功能雨实例源码.zip
android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo
Android 应用项目开发源码 参考和学习使用
点击屏幕,对焦,拍照功能全实现!部分资料来自网络,对焦功能自己想出的实现方法,所以1分下载吧,评价还你1分!
Android调用系统照相机并保存
android 图片剪切demo,包括相册图片裁剪,照相机拍摄图片裁剪
这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中
Android调用系统相册和系统照相机功能雨实例源码.zip
Android 录像照相机录像录音
android4.0照相机源码camera源码