android - 获取 AIMAGE_FORMAT_JPEG 图像失败

标签 android c++ image android-ndk

获取图片时:

assert(AIMAGE_FORMAT_JPEG == src_format, "Failed to get format");
AImage_getHeight(image, &height);
AImage_getWidth(image, &width);
AImage_getPlaneData(image, 0, &pixel, &y_len);

AImage_getPlaneRowStride(image, 0, &stride);
AImage_getPlanePixelStride(image, 0, &pixel_stride);

请注意,对于该格式,最后 2 个命令返回 AMEDIA_ERROR_UNSUPPORTED - 参见 docs .


现在写入缓冲区:

uint8_t *out = buf.data;
for (int y = 0; y < height; y++) {
    const uint8_t *pY = pixel + width*3*y;

    for (int x = 0; x < width; x++) {
        out[x*3 + 0] = pY[x*3 + 0];
        out[x*3 + 1] = pY[x*3 + 1];
        out[x*3 + 2] = pY[x*3 + 2];
    }
    out += width*3;
}

应用程序在启动后很快崩溃。 logcat 不会输出对我有意义的内容 - 至少不可读。关于如何处理这个问题有什么想法吗?

最佳答案

getPlaneData()对于 JPEG 为您提供未解码的缓冲区。可以看到返回的尺寸远小于width*height*3

关于android - 获取 AIMAGE_FORMAT_JPEG 图像失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43833989/

相关文章:

android - 依赖项 'android.arch.core:runtime' 具有不同版本的编译和运行时类路径

javascript - 当用户放大或缩小时防止背景图像缩放

android - 安装应用程序时创建初始 SQLiteDatabase

java - Android - Dagger 注入(inject)非 Activity 或 fragment

c# - C# COM DLL 中的 ManagementObject 泄漏

共享内存实现上的 C++ 内存池 : Is this method of allocation and deallocation correct?

相对于图像的 HTML/CSS 文本

html - 在 HTML 和 CSS 中使图像移动响应

java - Media Recorder 在 Android 中启动失败,用于三星 Galaxy s3 的前置摄像头

c++ - 如何解决简单的 TcpServerSrc 到 TcpServerSink 管道中失败的 gstreamer 断言