转处:http://892848153.iteye.com/blog/1851869
好吧,为了这个问题又折腾了一整天。之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就知道了。如果要获取原图,还需要一番折腾(特别是对于手里这个Samsung i9000)——之前朋友在不同的机型上使用的方法在我这里一直报错,且属于那种uncaught的错误-.-
话说回来,具体的折腾方法如下(如果不幸你看到了,希望不要“折疼了”):
在拍照的出发按钮的点击事件中写入如下代码:
toCam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//先验证手机是否有sdcard
String status=Environment.getExternalStorageState();
if(status.equals(Environment.MEDIA_MOUNTED))
{
try {
File dir=new File(Environment.getExternalStorageDirectory() + "/"+localTempImgDir);
if(!dir.exists())dir.mkdirs();
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File f=new File(dir, localTempImgFileName);//localTempImgDir和localTempImageFileName是自己定义的名字
Uri u=Uri.fromFile(f);
intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
intent.putExtra(MediaStore.EXTRA_OUTPUT, u);
startActivityForResult(intent, GET_IMAGE_VIA_CAMERA);
} catch (ActivityNotFoundException e) {
// TODO Auto-generated catch block
Toast.makeText(ImpromptuActivity.this, "没有找到储存目录",Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(ImpromptuActivity.this, "没有储存卡",Toast.LENGTH_LONG).show();
}
dialog.dismiss();
}
});
在onActivityResult中这样折腾:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode==RESULT_OK )
{
switch(requestCode)
{
case GET_IMAGE_VIA_CAMERA:
File f=new File(Environment.getExternalStorageDirectory()
+"/"+localTempImgDir+"/"+localTempImgFileName);
try {
Uri u =
Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(),
f.getAbsolutePath(), null, null));
//u就是拍摄获得的原始图片的uri,剩下的你想干神马坏事请便……
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
别高兴太早了,还有关键问题:
上面的代码只要你会用google,一般都能找来拼凑一番。但是,仅仅是这样,你还会得到未知错误……Samsung的系统相机,版式是横板的,如果你的activity恰巧是竖版的,那么获取这个回调uri的时候,很可能为空!
原因在于,如果你没有设置版式改变的时候,activity不要调用onCreate方法!这就是要命的地方!
设置方法其实很简单:
1、在Manfest.xml中,给activity添加一个属性:android:configChanges="orientation|keyboardHidden"
2、在activity中添加:
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
}
另外还有一个蛋疼的错误容易犯:千万别给这个activity添加单例模式,即:android:launchMode="singleInstance"
好了,完成这些,你就终于可以不“折疼”了! good luck!
照相得到的图片,最好自己指定路径,这样返回数据时,就不用从Intent中获取了,我们知道是什么路径,可以直接去拿。
相关推荐
以上是自定义带有取景框的Android相机的主要步骤和知识点,实际开发中可能需要根据具体需求进行更深入的定制,例如添加滤镜效果、人脸识别等功能。理解并掌握这些知识,将有助于你创建出更加个性化的相机应用。
以上是关于“Xamarin.Android相机使用实例源码及水印菜单”的主要知识点。通过学习和实践这个实例,开发者能够掌握如何在Xamarin环境中集成和定制相机功能,以及如何处理图像和添加水印,进一步提升应用的功能性和...
在Android平台上,开发一...总结来说,这个项目展示了如何利用Android原生接口实现相机预览和人脸检测,涵盖了Android相机API的使用、图像处理、坐标转换、界面绘制等多个技术点,是Android开发中的一个重要实践案例。
深入研究这些源码,开发者不仅可以理解Android相机系统的运行机制,还能学习到如何优化相机功能,开发自定义相机应用,或者为新的硬件平台编写适配器。这个压缩包提供的"Camerase4.1相机"文件应该包含上述提到的关键...
在Android平台上,自定义相机(CameraDIY)是开发者经常遇到的需求,特别是在创建涉及多媒体功能的...通过对这个项目的分析和学习,开发者可以深入了解Android相机API的使用,为自己的应用增添更多个性化的相机功能。
本教程将深入探讨如何在Android应用中实现自定义相机功能,包括使用Camera API和CameraX库。 首先,我们要了解Android的Camera API。Camera API是Android系统提供的一组接口,用于控制设备的摄像头进行拍照和录制...
在Android开发中,有时我们可能需要创建一个独特的用户体验,比如设计一个圆形的相机预览窗口。这个场景就涉及到了Android的SurfaceView以及如何定制它的显示效果。本文将深入探讨如何实现一个圆形的相机预览窗口。 ...
在Android应用开发中,创建一个自定义相机以实现身份证扫描功能是常见的需求。这涉及到对Android系统的相机API的深入理解和自定义布局设计。本篇将详细介绍如何构建这样一个系统,主要针对Android 6.0(API级别23)...
在Android 4.0.3(Ice Cream Sandwich)版本中,照相机功能是系统的核心组件之一,对于开发者来说,理解其源码可以帮助我们深入学习Android系统以及如何构建高性能、功能丰富的相机应用。以下是对Android 4.0.3照相机...
当我们在Android应用中使用Camera API创建自定义相机预览时,可能会遇到图像变形或拉伸的问题。这主要是由于两个因素: 1. 摄像头传感器的物理方向与设备屏幕显示方向不匹配。例如,如果设备处于竖屏模式,但摄像头...
在Android平台上,调用相机功能是开发者经常遇到的需求。针对Android 2.3.3(API级别10)这一版本,有三种主要的相机调用方法。本文将详细阐述这三种方式,帮助开发者更好地理解和应用。 1. **使用Intent启动系统...
《Android 7.0相机源码解析》 在Android系统中,相机功能是不可或缺的一部分,它为用户提供了捕捉生活...通过对源码的研究,开发者可以深入了解Android相机框架的工作原理,从而定制自己的相机应用,提升用户体验。
在Android平台上,自定义相机是一项常见的需求,尤其是在开发复杂或者高性能的图像处理应用时。`GLSurfaceView`是Android提供的一种高效方式,用于渲染OpenGL ES图形。本篇将深入探讨如何利用`GLSurfaceView`来实现...
同时,如果在Activity的生命周期中使用相机,记得在适当的时候停止预览和释放相机。 7. **权限管理**: 自Android 6.0(API级别23)开始,运行时权限管理变得重要。确保你的应用请求了`Manifest.permission.CAMERA...
4. **处理相机遮罩层**:在自定义相机中添加遮罩层,可以通过在TextureView之上添加一个半透明的View来实现。这个View可以是ImageView或者自定义View,通过设置背景颜色和透明度来达到遮罩效果。在触摸事件中,可以...
在Android开发中,有时我们需要对系统默认的相机功能进行扩展,以满足特定的拍摄需求,例如只拍摄画面中的矩形区域。这样的自定义相机功能可以应用于各种场景,比如二维码扫描、文档拍摄等,确保用户每次拍摄都能...
在Android开发中,自定义相机是一项常见的需求,但往往伴随着各种设备兼容性问题。本文将深入探讨一个特定的问题——在某些设备(如HTC)上,自定义相机可能导致黑屏的现象,以及如何解决这个问题。 首先,问题的...
这个demo可能包含了设置预览界面、处理拍照事件、保存图片到设备存储等功能的示例代码,是学习Android相机开发的好起点。 总之,Android自定义相机涉及到许多关键点,包括权限管理、相机实例的获取与释放、预览设置...
在Android开发中,调用系统相机以及自定义相机功能是常见的需求,特别是在涉及到图像拍摄和处理的应用中。本文将深入探讨如何实现这一功能,并重点介绍如何创建一个具有圆形取景框的自定义相机。 首先,调用系统...
本篇文章将深入探讨如何创建一个基本的Android相机拍照应用,并着重讲解如何针对不同手机设备调整图片尺寸。 首先,我们需要了解Android的Camera API。Android系统提供了一个名为`Camera`的类,用于访问和控制手机...