- 27
- 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;
}
你期待的结果是什么?实际看到的错误信息又是什么?
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 11 元积分
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
