使用 Android Camera2 API 裁剪预览图像
Crop the preview image using Android Camera2 API
目标是为来自 Camera2 api 捕获会话的帧在表面上裁剪预览,而不是裁剪将自行创建的视频。
例如,我的流媒体分辨率为 1920x1080
(16:9
),屏幕尺寸(仅举个例子)2000x3000
(2:3
-> 6:9
或 16:24
,例如,让我们选择第二个变体),所以我希望我的视频采用原始流媒体分辨率 - 1920x1080
,但我的预览会填充所有可用 space 没有 View
调整大小 - 所以它应该是 5333x3000
(只是使用与流分辨率相同的纵横比来增加大小以填充矩形区域),然后到 "cut" "frame data that corresponds to this surface's resolution (which is, I suppose, 5333x2000)" 到 2000x3000(只需从顶部和底部删除 (5333 - 2000) / 2
)。
可能吗?
P.S.: 不好的是 google sample for camera2 api 调整视图本身的大小,而这些 "blank areas" 对我来说是不需要的。我还没有找到任何与我的问题非常匹配的东西。
P.S.S.: AFAIU 裁剪来自相机本身的帧,但我需要我的视频保持原始分辨率。
如果您使用的是 TextureView,您可能可以调整它的 transform matrix to scale up the preview (and cut off the edges in the process). Read the existing matrix, fix up the aspect ratio and scale it up, and then save the new matrix。
但请注意,保存与您向用户显示的不同的视野可能会给您带来负面反应 - 请使用预览框出他们想要记录的内容,如果您重新保存有额外的东西,录制的视频将不符合预期。当然,对于您的用例来说,这可能不是问题。
目标是为来自 Camera2 api 捕获会话的帧在表面上裁剪预览,而不是裁剪将自行创建的视频。
例如,我的流媒体分辨率为 1920x1080
(16:9
),屏幕尺寸(仅举个例子)2000x3000
(2:3
-> 6:9
或 16:24
,例如,让我们选择第二个变体),所以我希望我的视频采用原始流媒体分辨率 - 1920x1080
,但我的预览会填充所有可用 space 没有 View
调整大小 - 所以它应该是 5333x3000
(只是使用与流分辨率相同的纵横比来增加大小以填充矩形区域),然后到 "cut" "frame data that corresponds to this surface's resolution (which is, I suppose, 5333x2000)" 到 2000x3000(只需从顶部和底部删除 (5333 - 2000) / 2
)。
可能吗?
P.S.: 不好的是 google sample for camera2 api 调整视图本身的大小,而这些 "blank areas" 对我来说是不需要的。我还没有找到任何与我的问题非常匹配的东西。
P.S.S.: AFAIU
如果您使用的是 TextureView,您可能可以调整它的 transform matrix to scale up the preview (and cut off the edges in the process). Read the existing matrix, fix up the aspect ratio and scale it up, and then save the new matrix。
但请注意,保存与您向用户显示的不同的视野可能会给您带来负面反应 - 请使用预览框出他们想要记录的内容,如果您重新保存有额外的东西,录制的视频将不符合预期。当然,对于您的用例来说,这可能不是问题。