- 浏览: 473552 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 2740背景 随着android应用体积的不断增大 ... -
Activity是如何生成一个 view 的
2013-05-16 11:09 1380Activity是一个工人,它来控制Window;Windo ... -
Android 获取新浪天气预报数据
2012-12-07 13:07 3102新浪天气预报地址: http://php.weathe ... -
Android连接网络问题
2012-11-23 11:14 2068一、检查网络是否连接 方法一、 publ ... -
Android异步下载图片并且缓存图片到本地
2012-09-06 16:21 1951转来的,以备不时之需!! 在Android开发中 ... -
android--相机开发
2012-08-10 08:17 11641在android中应用相机功能,一般有两种:一种是直接调 ... -
15个令人震惊的HTML5效果
2012-07-04 10:09 137015个令人震惊的HTML5效果 除非你一直 ... -
Android 读写文件的N种写法
2012-07-04 09:54 1123Android 读写文件的N种写法(待续。。。) ... -
如何干掉360(付代码)
2012-06-29 16:09 1375最近360很凶,有推送的,有桌面图标的,全部会被提示有风 ... -
Cocos2d-x跨Android&iOS平台开发入门
2012-06-26 10:22 1587好吧,确实存在这 ... -
解决Android加载图片时内存溢出的问题
2012-06-18 13:52 46394尽量不要使用setImageBitmap或setImag ... -
android 代码 混淆
2012-06-04 10:22 20831、得到 classes.dex文件;直接用你机器上的 ... -
android代码混淆是出现Conversion to Dalvik format failed with error 1的解决方法
2012-06-04 10:18 4503最近做android项目,给代码混淆时遇到问题,在项目加入混淆 ... -
Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
2012-03-20 16:44 1929一、Surface Surface就是“表面”的意思。 ... -
Re-installation failed解决方法
2011-12-27 22:49 4871我的方法:去模拟器卸载上次安装的*.apk ... -
Failed to install *.apk on device 'emulator-5554': timeout
2011-12-20 00:31 9328错误提示: Failed to inst ... -
android 中的 Bitmap
2011-12-20 00:32 3970在Android SDK中说明可以支持的图片格式如下:p ... -
Android 小球重力感应实现
2011-12-16 20:49 1686重力感应主要是依靠手机的加速度传感器(acceleromete ... -
Android中资源文件夹res/raw和assets的使用
2011-12-16 20:37 9573*res/raw和assets的相同点: 1.两者目录 ... -
为不同分辨率的手机创建界面
2011-12-16 20:36 15131,首先进入res 文件夹下。 2,创建一个名为“la ...
相关推荐
在Android开发中,有时我们需要对系统默认的相机功能进行扩展,以满足特定的拍摄需求,例如只拍摄画面中的矩形区域。这样的自定义相机功能可以应用于各种场景,比如二维码扫描、文档拍摄等,确保用户每次拍摄都能...
在Android平台上,自定义相机是一项常见的功能,它允许开发者根据特定需求定制相机界面和功能,以提供更加个性化和丰富的用户体验。下面将详细讲解如何在Android中实现自定义相机。 首先,你需要创建一个新的`...
在Android应用开发中,调用系统照相机功能是常见的需求,允许用户拍摄照片或录制视频。下面我们将深入探讨如何实现这一功能。 首先,我们需要在AndroidManifest.xml文件中添加权限,以便应用可以访问摄像头: ```...
- **IDE**: 推荐使用Android Studio作为开发环境,它提供了强大的编辑器和支持功能。 - **Camera API**: Android系统提供的用于控制摄像头硬件的API。 - **MediaStore API**: 用于管理设备上的媒体文件,如图片和...
这个"android 简易camera照相机"项目旨在提供一个基础的拍照和预览功能。下面将详细解释如何实现这些功能,以及涉及到的关键知识点。 首先,Android中的Camera API分为两代:Camera API1和Camera API2。Camera API1...
在Android 4.0.3(Ice Cream Sandwich)版本中,照相机功能是系统的核心组件之一,对于开发者来说,理解其源码可以帮助我们深入学习Android系统以及如何构建高性能、功能丰富的相机应用。以下是对Android 4.0.3照相机...
6. **权限管理:**在Android 6.0及以上版本,使用相机功能需要动态请求CAMERA权限。 7. **用户界面:**设计一个友好的UI至关重要,包括拍照按钮、切换前后摄像头的选项、闪光灯开关等。 8. **兼容性处理:**由于...
在Android 7.0系统中,照相机功能的实现依赖于其内核源码,这部分代码提供了对硬件接口的直接访问,以及与上层应用程序框架交互的机制。本主题主要探讨的是Android系统的照相机服务(Camera Service)和相关组件的...
本文将详细介绍如何在Android中实现这两个功能,并提供相应的源码实例。 首先,我们来看如何调用系统相册。在Android中,我们可以使用`Intent`来启动系统相册应用,让用户选择图片。以下是一个简单的示例: ```...
在Android应用开发中,实现对焦和拍照功能是常见的需求,尤其在开发摄影类或社交类应用时。本文将详细讲解如何在Android中实现在点击屏幕后进行对焦并拍照的功能。 首先,我们需要理解Android的相机API。Android...
本项目标题为“android照相机相册选择,可以多选”,说明它实现了在Android平台上让用户能够通过自定义的方式,不仅能够使用相机拍摄照片,还能够从相册中选取多张图片,并且具备删除已选择图片的功能。这一特性极大...
总之,这个“android4.0 Camera照相机 源代码”压缩包提供了Android 4.0时代相机功能实现的详细示例,对于深入学习Android Camera API和开发相关应用具有很高的参考价值。通过研究这些源代码,开发者能够更好地理解...
这个"Android编写的照相机"项目是一个基础的Demo,旨在帮助初学者理解如何在Android应用程序中集成相机功能。下面,我们将详细探讨这个Demo实现的关键知识点以及可能的扩展方向。 首先,我们要知道在Android中访问...
在Android开发中,照相机功能是用户非常常用且重要的特性之一。在Android 4.0(API Level 14)时,系统对相机API进行了重大更新,提供了更强大的功能和更好的性能。本压缩包文件“android4.0 camera 照相机代码jar包...
在Android应用开发中,提供用户调用照相机拍照...以上就是关于“android调用照相机拍照与选择本地照片功能”的核心知识点,开发者在实现这些功能时,需要注意优化用户体验,合理管理文件,以及遵循Android的最佳实践。
综上所述,这个简易照相机应用的实现涉及到了Android相机API的使用、兼容性处理、用户界面设计、多媒体文件存储、权限管理等多个重要技术点。通过深入理解和实践这些知识点,开发者可以构建出功能丰富的移动摄影应用...
android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo
本文将详细解析如何在Android应用中实现这两个功能,并提供相关的源码实例。 首先,调用系统相册的功能是允许用户从手机存储中选择图片。这通常通过Intent的ACTION_PICK操作来实现。在AndroidManifest.xml中,确保...
在Android系统中,相机服务(Camera Service)是整个相机功能的核心,它负责管理硬件资源,提供API供应用程序调用,并处理图像数据的捕获与处理。这篇详尽的"android里面cemera照相机的运行流程"框架研究文档,将...