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

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

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

自定义相机中,我调用这句:
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个回答

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;
}

    通过这种方式压缩,调整,可以适当保真
Jae_q
machine_learner 先谢过你,但是我在哪里调用这个方法呢?我的问题是系统自动给我压缩了图片,我不想让其压缩的。谢谢哈
大约 4 年之前 回复

先谢过你,但是我在哪里调用这个方法呢?我的问题是系统自动给我压缩了图片,我不想让其压缩的。谢谢哈

在takePicture方法里调用

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐