在PreviewCall背面,我们在相机预览中得到了YUV420SP格式,但是由于该图像的旋转错误,我想要正确旋转YUV图像,因为我需要通过网络发送它。因此需要应用正确的旋转。
In PreviewCall back of surface we are getting YUV420SP format in camera Preview but due to wrong rotation of that image I want to perform correct rotation of YUV image as I need to send it through network.so correct rotation need to be applied.
我发现此链接确实正确旋转但图像颜色松散。
I found this link it does correct rotation but image loose the color.
http:// www .wordsaretoys / 2013/10/25 / roll-that-camera-zombie-rotation-and-coversion-from-yv12-to-yuv420planar /
还检查了在Android上旋转YUV字节数组但它没有正确显示图像。
also checked Rotate an YUV byte array on Android but it does not show image properly.
我确实检查了stckoverflow上的链接,但没有一个人能够正确使用android环境中的代码。
I do have checked links on stckoverflow but none of them have satisfactory answer about correctly using the code in android environment.
do任何人都知道如何正确旋转NV21图像字节[]并正确保留其颜色信息。
do any one have idea how to correctly rotate NV21 Image bytes[] with retaining its color information correctly.
推荐答案如果你只是想旋转NV21,以下代码会有所帮助。 (我修改了代码从这里开始)
If you just want to rotate NV21, following code will be helpful. (I modified the code from here)
public static void rotateNV21(byte[] input, byte[] output, int width, int height, int rotation) { boolean swap = (rotation == 90 || rotation == 270); boolean yflip = (rotation == 90 || rotation == 180); boolean xflip = (rotation == 270 || rotation == 180); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { int xo = x, yo = y; int w = width, h = height; int xi = xo, yi = yo; if (swap) { xi = w * yo / h; yi = h * xo / w; } if (yflip) { yi = h - yi - 1; } if (xflip) { xi = w - xi - 1; } output[w * yo + xo] = input[w * yi + xi]; int fs = w * h; int qs = (fs >> 2); xi = (xi >> 1); yi = (yi >> 1); xo = (xo >> 1); yo = (yo >> 1); w = (w >> 1); h = (h >> 1); // adjust for interleave here int ui = fs + (w * yi + xi) * 2; int uo = fs + (w * yo + xo) * 2; // and here int vi = ui + 1; int vo = uo + 1; output[uo] = input[ui]; output[vo] = input[vi]; } } }更多推荐
在android中旋转YUV420 / NV21图像
发布评论