获取AIMAGE_FORMAT_JPEG的图像失败

时间:2017-05-07 16:38:11

标签: 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没有输出对我有意义的东西 - 至少不可读。关于如何处理这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

JPEG的

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