v310 拍照发现预览照片时显示异常

原因:

  jpg的EXIF信息出错, 为了简单, 不写入 EXIF即可

 

#if (CAM_WRITE_JPEG_THUMB_EXIF_EN > 0)
 if (mMsgEnabled & CAMERA_MSG_COMPRESSED_IMAGE) {
  camera_memory_t *ExifHeap =
            mGetMemoryCb(-1, EXIF_FILE_SIZE + mThumbSize, 1, 0);

        int JpegExifSize = mSecCamera->getExif((unsigned char *)ExifHeap->data,
                                           (unsigned char *)mThumbnailHeap->base(),
                                            mThumbSize);
        LOGV("JpegExifSize=%d", JpegExifSize);

        if (JpegExifSize < 0) {
            ret = UNKNOWN_ERROR;
            goto out;
        }

        int mJpegHeapSize_out = JpegImageSize + JpegExifSize;
        camera_memory_t *JpegHeap_out = mGetMemoryCb(-1, mJpegHeapSize_out, 1, 0);

        unsigned char *ExifStart = (unsigned char *)JpegHeap_out->data + 2;
        unsigned char *ImageStart = ExifStart + JpegExifSize;

        memcpy(JpegHeap_out->data, JpegHeap->data, 2);
        memcpy(ExifStart, ExifHeap->data, JpegExifSize);
        memcpy(ImageStart, JpegHeap->data + 2, JpegImageSize - 2);

        mDataCb(CAMERA_MSG_COMPRESSED_IMAGE, JpegHeap_out, 0, NULL, mCallbackCookie);

        if (ExifHeap) {
            ExifHeap->release(ExifHeap);
            ExifHeap = 0;
        }

        if (JpegHeap_out) {
            JpegHeap_out->release(JpegHeap_out);
            JpegHeap_out = 0;
        }
    }
#else
/*
在预览图片时底部显示异常, 但是真正打开时是显示正常的,
经查实发现是 EXIF 的信息造成的问题, 现在为了简单解决, 不写入 EXIT 信息
*/
 if (mMsgEnabled & CAMERA_MSG_COMPRESSED_IMAGE) {
  camera_memory_t *ExifHeap = NULL;
            //mGetMemoryCb(-1, EXIF_FILE_SIZE + mThumbSize, 1, 0);

        int JpegExifSize = 0;//mSecCamera->getExif((unsigned char *)ExifHeap->data,
                             //              (unsigned char *)mThumbnailHeap->base(),
                             //               mThumbSize);
        LOGV("JpegExifSize=%d", JpegExifSize);

        if (JpegExifSize < 0) {
            ret = UNKNOWN_ERROR;
            goto out;
        }

        int mJpegHeapSize_out = JpegImageSize + JpegExifSize;
        camera_memory_t *JpegHeap_out = mGetMemoryCb(-1, mJpegHeapSize_out, 1, 0);

        //unsigned char *ExifStart = (unsigned char *)JpegHeap_out->data + 2;
        //unsigned char *ImageStart = ExifStart + JpegExifSize;

        //memcpy(JpegHeap_out->data, JpegHeap->data, 2);
        //memcpy(ExifStart, ExifHeap->data, JpegExifSize);
        //memcpy(ImageStart, JpegHeap->data + 2, JpegImageSize - 2);
  //memcpy(ImageStart, JpegHeap->data, JpegImageSize);
  memcpy((unsigned char *)JpegHeap_out->data, JpegHeap->data, JpegImageSize);
  
        mDataCb(CAMERA_MSG_COMPRESSED_IMAGE, JpegHeap_out, 0, NULL, mCallbackCookie);
  

        if (ExifHeap) {
            ExifHeap->release(ExifHeap);
            ExifHeap = 0;
        }

        if (JpegHeap_out) {
            JpegHeap_out->release(JpegHeap_out);
            JpegHeap_out = 0;
        }
    }
#endif

     如果需要iBeacon基站开发, 请看这里  http://cc2540.taobao.com/    , 这里能提供基于cc2540cc2541的蓝牙4.0BLE开发的详细硬件和软件资料, QQ2045315160,  阿莫单片机论坛 www.amoMCU.com  提供技术支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值