求助:关于bitmap截取指定区域的问题

dinjay 2011-08-03 04:51:01
RT,现在用camera拍照,将照片内容做区域截取并保存。
调用camera的takePicture(shutterCallback, null, jpegCallback);照相,在
jpegCallback的onPictureTaken回调函数中处理数据。

public void onPictureTaken(byte[] data, Camera camera) {
Rect rect = new Rect();
rect = myView.getSelectedRect();//获取要截取的图片区域
Parameters ps = camera.getParameters();
if(ps.getPictureFormat() == PixelFormat.JPEG){
Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); //转为bitmap
Bitmap mBitmapSelectBitmap = mBitmap.createBitmap(mBitmap, rect.left,
rect.top, rect.width(), rect.height());//按照指定区域创建位图
byte []btTmp =Bitmap2Bytes(mBitmapSelectBitmap); //将位图转为byte数组
mBitmapSelectBitmap.recycle();
mBitmap.recycle();
}
}


这样操作后,我将截取的图像写在文件里,打开发现并不是程序中指定截取的那块图像。不知道是哪儿出的问题。

//这是转数组的函数
private static byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 80, baos);
return baos.toByteArray();
}

各位帮着看看吧~多谢了~~~~
...全文
624 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
certificate 2012-02-22
  • 打赏
  • 举报
回复
Hi 楼主, 我现在碰到同样的问题, 可否共享一下你的代码。
多谢! gestapo#126.com
dinjay 2011-08-04
  • 打赏
  • 举报
回复
谢谢 我再试试。
Vellee 2011-08-04
  • 打赏
  • 举报
回复
对rect进行个比例转换就差不多了
dinjay 2011-08-04
  • 打赏
  • 举报
回复
基本知道是什么问题了,但是有点儿麻烦,
首先在设置camera参数时,
//设置预览照片的大小
setPreviewSize是768x432//通过调用camera的getPreviewSize获取到的
//设置拍摄图片的大小
setPictureSize是1024x768//通过camera的getPictureSize获取到的,还有其他几种可以指定,不能自定义


我在自定义的view上进行截取图片上的一段区域,但是这个view的getDefaultDisplay是533x320
所以我截取到的区域位置也是按照这个区域大小算的,但是真正的图片是1024x768的,我不想压缩,怕失真,所以只能按比例来修正坐标了。

Vellee 2011-08-03
  • 打赏
  • 举报
回复
还有一种可能可能是是拍摄的图片大小跟屏幕分辨率不同,图片显示在屏幕上是被缩放后的,createBitmap是建立在原图基础上的
Vellee 2011-08-03
  • 打赏
  • 举报
回复
试试把原图保存下来,打印出rect.left, rect.top, rect.width(), rect.height(),这几个值,写个测试代码mBitmap.createBitmap(mBitmap, 0,0,50,50);看不出有什么错误。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧