machine_learner 2016-08-01 11:43 采纳率: 0%
浏览 1576
已结题

安卓底层Camera中图片自动压缩的问题

问题:我用系统底层的相机拍照,但是拍出来的照片压缩很严重,

    找了很久也没解决的办法,求大神指点。

自定义相机中,我调用这句:
mCamera.takePicture(null,null, new PictureCallback() {// 查看源码是这样:
public final void takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg) {
takePicture(shutter, raw, null, jpeg);
}// 继续调用这个:
public final void takePicture(ShutterCallback shutter, PictureCallback raw,
PictureCallback postview, PictureCallback jpeg) {
mShutterCallback = shutter;
mRawImageCallback = raw;
mPostviewCallback = postview;
mJpegCallback = jpeg;

    // If callback is not set, do not send me callbacks.
    int msgType = 0;
    if (mShutterCallback != null) {
        msgType |= CAMERA_MSG_SHUTTER;
    }
    if (mRawImageCallback != null) {
        msgType |= CAMERA_MSG_RAW_IMAGE;
    }
    if (mPostviewCallback != null) {
        msgType |= CAMERA_MSG_POSTVIEW_FRAME;
    }
    if (mJpegCallback != null) {
        msgType |= CAMERA_MSG_COMPRESSED_IMAGE;//            这句话对图片进行压缩吧,但是我的代码中mJpegCallback并不是null啊,找了很久都没人谈这个问题,
    }


    native_takePicture(msgType);
    mFaceDetectionRunning = false;
}
  • 写回答

3条回答

  • qq_26337701 2016-08-01 14:32
    关注

    public ByteArrayOutputStream compress(Bitmap bitmap) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
    int options = 99;
    while (baos.toByteArray().length / 1024 > maxSize) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
    options -= 3;// 每次都减少10
    // 压缩比小于0,不再压缩
    if (options < 0) {
    break;
    }
    Log.i(TAG, baos.toByteArray().length / 1024 + "");
    baos.reset();// 重置baos即清空baos
    bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中
    }
    return baos;
    }

        通过这种方式压缩,调整,可以适当保真
    
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog