2017-05-07 57 views
1

獲取影像時:AIMAGE_FORMAT_JPEG的擷取圖片失敗

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

注意,這最後兩個命令該格式返回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不會輸出對我有意義的東西 - 至少不可讀。有關如何解決這個問題的任何想法?

回答

0

getPlaneData() for JPEG給你未解碼的緩衝區。你可以看到返回的尺寸遠小於width*height*3

+0

的確,我也注意到了。那麼這是否意味着我必須自己照顧解碼? –

+0

是的,如果你想RGB,那麼你可以使用相當於'BitmapFactory.decodeByteArray()'。你也可以有YUV數據。請注意,即使system/libs文件夾中有libjpeg.so,也不應該使用它,而是將libjpeg嵌入到應用程序中。 –