yv12格式视频流保存成jpg/png图片或转rgb格式(java)
问题描述
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论