我正在寻找旋转从预览Callblack收到的YUV帧预览,到目前为止我已经创建了这个帖子,其中包含一个算法来旋转帧预览,但是正在弄乱预览图像 相机像素旋转
旋转图像的另一种方法是从YUV图像中创建一个jpg,创建一个位图,旋转一个位图并获得位图的字节数组,但我真的需要YUV格式(NV21).
仅供参考.我问这个的原因是因为我有一个支持旋转的相机应用程序,但框架预览仅以横向模式返回.
我想对从相机获得的像素进行一些图像处理.
问题是来自相机的像素旋转了90度.
我得到方法内的像素 onPreviewFrame(byte[] data, Camera camera)
我试过camera.setDisplayOrientation(90);,它以正确的方向显示视频,但我仍然收到文档中所述的旋转像素:
这不会影响在Android.Hardware.Camera.IPreviewCallback.OnPreviewFrame(Byte [],Android.Hardware.Camera),JPEG图片或录制的视频中传递的字节数组的顺序.
我也尝试过:
parameters.setRotation(90);
camera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
但那没用.
我正在使用android 2.2

顶部图像显示使用时的SurfaceView camera.setDisplayOrientation(90);
第二个图像onPreviewFrame(byte[] data, Camera camera)从data数组中获取.如您所见,data阵列旋转.
注意:我帖子中的所有信息仅适用于 Samsung Galaxy S7 设备。我不知道模拟器和其他设备的行为如何。
在 onImageAvailable 中,我将每个图像连续转换为 NV21 字节数组,并将其转发到需要原始 NV21 格式的 API。
这是我初始化图像读取器并接收图像的方式:
private void openCamera() {
...
mImageReader = ImageReader.newInstance(WIDTH, HEIGHT,
ImageFormat.YUV_420_888, 1); // only 1 for best performance
mImageReader.setOnImageAvailableListener(
mOnImageAvailableListener, mBackgroundHandler);
...
}
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireLatestImage();
if (image != null) {
byte[] data = convertYUV420ToNV21_ALL_PLANES(image); // this image is turned 90 deg using front cam in portrait mode
byte[] data_rotated = rotateNV21_working(data, …Run Code Online (Sandbox Code Playgroud)