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();  
   }  各位帮着看看吧~多谢了~~~~

解决方案 »

  1.   

    试试把原图保存下来,打印出rect.left, rect.top, rect.width(), rect.height(),这几个值,写个测试代码mBitmap.createBitmap(mBitmap, 0,0,50,50);看不出有什么错误。
      

  2.   

    还有一种可能可能是是拍摄的图片大小跟屏幕分辨率不同,图片显示在屏幕上是被缩放后的,createBitmap是建立在原图基础上的
      

  3.   

    基本知道是什么问题了,但是有点儿麻烦,
    首先在设置camera参数时,
    //设置预览照片的大小
    setPreviewSize是768x432//通过调用camera的getPreviewSize获取到的
    //设置拍摄图片的大小
    setPictureSize是1024x768//通过camera的getPictureSize获取到的,还有其他几种可以指定,不能自定义
    我在自定义的view上进行截取图片上的一段区域,但是这个view的getDefaultDisplay是533x320
    所以我截取到的区域位置也是按照这个区域大小算的,但是真正的图片是1024x768的,我不想压缩,怕失真,所以只能按比例来修正坐标了。
      

  4.   

    对rect进行个比例转换就差不多了
      

  5.   

    Hi 楼主, 我现在碰到同样的问题, 可否共享一下你的代码。
    多谢!   gestapo#126.com