用Android的camera2拍摄灰度照片
Taking grayscale picture with Android's camera2
我正在创建一个用于拍照并通过 http POST 将照片发送到我的服务器的应用程序。因为我只需要服务器端的灰度数据,所以只拍摄灰度图片而不用转换它会好得多。
我正在使用 Camera2 API 并且在为 CaptureRequest.Builder
实例设置属性时遇到问题。有了这个:
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
它拍了一张底片。
但是这个:
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, CaptureRequest.CONTROL_EFFECT_MODE_MONO);
什么都不做。没有灰度。只是一张普通的照片。
您需要查看设备上的 supported effects 列表,看看它是否真正支持 MONO。
如果您只关心亮度,您可以只捕获 YUV_420_888 缓冲区而不是 JPEG,并且只将 Y 缓冲区发送到服务器。不过,这不会让您自动进行 JPEG 编码。
另请注意,通常在引擎盖下,JPEG 图像以 YUV 编码;因此,如果您深入了解 JPEG 解码器库,您可能能够在转换为 RGB 之前获取图像数据,并简单地忽略色度通道。
captureRequestBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE,CameraMetadata.CONTROL_EFFECT_MODE_MONO);
你可以使用这个`
我正在创建一个用于拍照并通过 http POST 将照片发送到我的服务器的应用程序。因为我只需要服务器端的灰度数据,所以只拍摄灰度图片而不用转换它会好得多。
我正在使用 Camera2 API 并且在为 CaptureRequest.Builder
实例设置属性时遇到问题。有了这个:
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
它拍了一张底片。 但是这个:
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, CaptureRequest.CONTROL_EFFECT_MODE_MONO);
什么都不做。没有灰度。只是一张普通的照片。
您需要查看设备上的 supported effects 列表,看看它是否真正支持 MONO。
如果您只关心亮度,您可以只捕获 YUV_420_888 缓冲区而不是 JPEG,并且只将 Y 缓冲区发送到服务器。不过,这不会让您自动进行 JPEG 编码。
另请注意,通常在引擎盖下,JPEG 图像以 YUV 编码;因此,如果您深入了解 JPEG 解码器库,您可能能够在转换为 RGB 之前获取图像数据,并简单地忽略色度通道。
captureRequestBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE,CameraMetadata.CONTROL_EFFECT_MODE_MONO);
你可以使用这个`