yv12格式视频流保存成jpg/png图片或转rgb格式(java)

发布于 2022-09-11 21:59:21 字数 2102 浏览 19 评论 0

问题描述

java,java,java的,研究海康摄像头,拿到了yv12格式的视频流数据,现在需要保存成图片或图片流数据,度娘后基本都是转rbg后再保存图片,在java这边有没有什么框架能支持yv12转rgb及rgb转图片或图片流的?或yv12直接转图片流等?

问题出现的环境背景及自己尝试过哪些方法

度娘找到的yv12转rgb的方法,效率不是很好,现rgb转图片或图片流不会,有没有方法?

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

// YV12格式一个像素占1.5个字节
    private byte[] YV12_To_RGB24(byte[] yv12, int width, int height) {
        if (yv12 == null || width < 1 || height < 1) {
            return null;
        }

        int nYLen = width * height;
        int halfWidth = width >> 1;

        if (nYLen < 1 || halfWidth < 1) {
            return null;
        }

        byte[] rgb24 = new byte[width * height * 3];
        int[] rgb = new int[3];
        int i, j, m, n, x, y;
        m = -width;
        n = -halfWidth;
        for (y = 0; y < height; y++) {
            m += width;
            if (y % 2 != 0) {
                n += halfWidth;
            }

            for (x = 0; x < width; x++) {
                i = m + x;
                j = n + (x >> 1);
                rgb[2] = (int) ((int) (yv12[i] & 0xFF) + 1.370705 * ((int) (yv12[nYLen + j] & 0xFF) - 128)); // r
                rgb[1] = (int) ((int) (yv12[i] & 0xFF) - 0.698001 * ((int) (yv12[nYLen + (nYLen >> 2) + j] & 0xFF) - 128) - 0.703125 * ((int) (yv12[nYLen + j] & 0xFF) - 128));   // g
                rgb[0] = (int) ((int) (yv12[i] & 0xFF) + 1.732446 * ((int) (yv12[nYLen + (nYLen >> 2) + j] & 0xFF) - 128)); // b

                //j = nYLen - iWidth - m + x;
                //i = (j<<1) + j;    //图像是上下颠倒的

                j = m + x;
                i = (j << 1) + j;

                for (j = 0; j < 3; j++) {
                    if (rgb[j] >= 0 && rgb[j] <= 255) {
                        rgb24[i + j] = (byte) rgb[j];
                    } else {
                        rgb24[i + j] = (byte) ((rgb[j] < 0) ? 0 : 255);
                    }
                }
            }
        }

        return rgb24;
    }

你期待的结果是什么?实际看到的错误信息又是什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文