解决通过Intent调用系统拍照程序,返回图片太小的问题[android]

 

以下的代码可以调用系统的拍照程序,


1

2

Intent it = newIntent("android.media.action.IMAGE_CAPTURE");

startActivityForResult(it, Activity.DEFAULT_KEYS_DIALER);

按下拍照键后,会返回到你的activity,所以你的activity要在onActivityResult方法里加一个处理,


1

2

3

4

5

6

7

8

9

10

11

12

13

protectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) {

     super.onActivityResult(requestCode, resultCode, data);

     try{

         Bundle extras = data.getExtras();

         Bitmap b = (Bitmap) extras.get("data");

         take = b;

         ImageView img = (ImageView)findViewById(R.id.image);

         img.setImageBitmap(take);

     }catch(Exception e){

     }

}

但是这样你会发现这个bitmap尺寸太小了。明显是被压缩过了,要像返回未被压缩的照片,那么你要给调用系统拍照程序intent加上参数,指定图片输出的位置。


1

2

3

Intent it = newIntent("android.media.action.IMAGE_CAPTURE");

it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(newFile(F.SD_CARD_TEMP_PHOTO_PATH)));

startActivityForResult(it, Activity.DEFAULT_KEYS_DIALER);

这样就是大图片返回了。


1

2

3

4

5

6

7

8

9

10

11

12

protectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) {

     super.onActivityResult(requestCode, resultCode, data);

     try{

         ImageView img = (ImageView)findViewById(R.id.image);

         take = U.ResizeBitmap(U.getBitmapForFile(F.SD_CARD_TEMP_PHOTO_PATH), 640);

         img.setImageBitmap(take);

         imgflag = true;

     }catch(Exception e){

     }

}

另外注意一下,返回的那个bitmap会很大,你用完以后要把它回收掉,不然你很容易内存报oom错误


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

publicstaticBitmap ResizeBitmap(Bitmap bitmap, intnewWidth) {

     intwidth = bitmap.getWidth();

     intheight = bitmap.getHeight();

     floattemp = ((float) height) / ((float) width);

     intnewHeight = (int) ((newWidth) * temp);

     floatscaleWidth = ((float) newWidth) / width;

     floatscaleHeight = ((float) newHeight) / height;

     Matrix matrix = newMatrix();

     // resize the bit map

     matrix.postScale(scaleWidth, scaleHeight);

     // matrix.postRotate(45);

     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);

     bitmap.recycle();

     returnresizedBitmap;

}

时间: 2024-08-24 13:55:23

解决通过Intent调用系统拍照程序,返回图片太小的问题[android]的相关文章

代码-android调用系统拍照无返回值

问题描述 android调用系统拍照无返回值 我调用照相机拍照的代码是: cameraFile = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), DemoApplication.getInstance().getUserName() + System.currentTimeMillis() + ".jpg")); cameraFileString = cameraFile.getPath().toStr

android调用系统拍照程序和从图库选取图片,返回后调用系统裁剪工具

调用系统拍照 Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File myImageDir = new File(TEMP_TAKE_PHOTO_FILE_PATH); //创建图片保存目录if (!myImageDir.exists()) {Mylog.d(THIS, "Create the path:" + TEMP_TAKE_PHOTO_FILE_PATH);myImageDir.mkdirs();} //根据时间

调用系统拍照,照片显示问题

问题描述 调用系统拍照,照片显示问题 调用系统拍照时怎么解决不同手机兼容问题??有些手机上拍照完成后,照片显示不出来... 解决方案 解决Android拍照保存在系统相册不显示的问题Android拍照后显示照片Android 拍照后显示照片---------------------- 解决方案二: 你可以拍照完成后,保存在本地,然后从本地读取图片,显示出来

android-三星 note II 调用系统拍照获取到的照片是旋转的

问题描述 三星 note II 调用系统拍照获取到的照片是旋转的 拍完照好像旋转了,但到文件管理器中看到的图片并不是旋转的,这是怎么回事,难道还要手动旋转下? 解决方案 三星note2 android调用系统拍照空指针异常三星note2 android调用系统拍照空指针异常关于三星手机拍照 获取的照片旋转处理 解决方案二: 设置旋转为不旋转就可以了写死

android-Android 调用系统拍照如果截图太大有一瞬间的卡住,然后再跳到上传

问题描述 Android 调用系统拍照如果截图太大有一瞬间的卡住,然后再跳到上传 Android 调用系统拍照如果截图太大有一瞬间的卡住,然后再跳到上传 解决方案 http://bbs.csdn.net/topics/390657801 试试这个方法.. 解决方案二: 尽量不要卡UI......建议 解决方案三: 卡住应该是把图片转成流数据的过程,你把上传放到异步里面去

win7系统玩NBA2K17游戏声音太小如何解决

win7系统玩NBA2K17游戏声音太小如何解决   解决方法: 1.在游戏目录CommonRedist文件夹里的DirectX,进去之后有个DXSEUP,安装上就有声音了; 2.任务栏的右下角,小喇叭,右击[声音]; 3.播放--扬声器(属性)--增强,响度均衡(打勾).

C#调用系统自带的图片查看器 打开多张图片

问题描述 想要实现调用系统自带的图片查看器打开多张图片如同在window下按住Ctrl多选文件打开一样..急.... 解决方案 解决方案二:"系统自带的图片查看器"是啥东东呢?解决方案三:他说的应该是windowsj照片查看器,解决方案四:Process.Start("图片管理器.exe","图片路径")我猜的..解决方案五:privatevoidbutton1_Click(objectsender,EventArgse){openFileDia

Android调用系统拍照裁剪图片模糊的解决方法

在Android中,调用系统相机拍照时,将会接收到返回的图像数据,但是这些图片并不是全尺寸的图像,而是系统给的缩略图,当对拍照的图片进行裁切后显示时,得到的却是模糊的图片.下面针对这个问题提出解决的方法. 首先,我们知道调用系统的裁切是通过Intent intent = new Intent("com.android.camera.action.CROP"); 但是intent到底能够携带哪些数据呢,都有什么含义呢,我们可以看到如下: 上面包含了所有可选的操作,其中有一些非常重要的参数

Android启动相机拍照并返回图片_Android

具体实现过程请看下面代码: 简单的调用了一下系统的拍照功能 代码如下所示: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下sdcard是否可用 */ String state = Environment.getExternalStorageState(); //拿到sdcard是否可用的状态码 if (state.equals(Environment.MEDIA_MOUNTED)){ //如果可用 Intent intent