簡體   English   中英

Android Camera2 API 圖像色彩空間

[英]Android Camera2 API Image Color space

我使用本教程學習並嘗試了解如何使用 Camera2 API 制作簡單的拍照 android 應用程序。 我從代碼中添加了一些片段,看看你們是否能幫助我理解我的一些問題。

我試圖找出圖像是如何保存的。 是RGB還是BGR? 它是否存儲在可變字節中?

ImageReader reader = ImageReader.newInstance(width,height,ImageFormat.JPEG, 1);


@Override
public void onImageAvailable(ImageReader reader) {
      Image image = null;
      try {
            image = reader.acquireLatestImage();
            ByteBuffer buffer = image.getPlanes()[0].getBuffer();
            byte[] bytes = new byte[buffer.capacity()];
            buffer.get(bytes);
            save(bytes);
      }

圖像以 JPEG 格式(在第一行中指定)接收。 Android 對 JPEG 使用 YUV(更准確地說,YCbCr)顏色空間。 Jpeg 大小是可變的,它使用有損壓縮進行壓縮,您幾乎無法控制壓縮級別。

通常,您會在onImageAvailable()中收到一個 JPEG 緩沖區並解碼此 JPEG 以接收Bitmap 您可以將此 Bitmap 的像素作為打包SRGB像素的 int 數組獲取。 該數組的格式ARGB_8888 您不需要 JNI 將其轉換為 BGR,請參閱此答案

您可以從 C++ 訪問 Bitmap 對象,請參閱ndk/reference/group/bitmap 在那里你可以找到這個 bitmap 的像素格式 如果它是從 JPEG 解碼的,您應該期望它是ANDROID_BITMAP_FORMAT_RGBA_8888

變量bytes包含一個完整的壓縮 JPEG 文件。 您需要對其進行解壓縮才能對其進行任何操作,例如使用BitmapFactory.decodeByteArrayImageDecoder (較新的 API 級別)。

在任何意義上,它都不是一個未壓縮的 RGB 值數組。 如果您想要未壓縮的數據,相機 API 支持YUV_420_888格式,它將為您提供未壓縮的 4:2:0 YUV 數據; 不過,仍然不是 RGB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM