直接操作 SDL_Overlay YUV叠加上的像素
2024-10-19 04:33:38
根据这篇解码出yuv数据后
海思h264解码库
y,u,v数据全部存进数组内,
IntPtr y = _decodeFrame.pY;
IntPtr v = _decodeFrame.pV;
IntPtr u = _decodeFrame.pU;
byte[] ys = new byte[yLength];
Marshal.Copy(y, ys, 0, yLength);
byte[] vs = new byte[uLength];
Marshal.Copy(v, vs, 0, uLength);
byte[] us = new byte[uLength];
Marshal.Copy(u, us, 0, uLength);
rgb转yuv转换矩阵C++,网上其他的不能用
//转换矩阵
#define MY(a,b,c) (( a* 0.2989 + b* 0.5866 + c* 0.1145))
#define MU(a,b,c) (( a*(-0.1688) + b*(-0.3312) + c* 0.5000 + 128))
#define MV(a,b,c) (( a* 0.5000 + b*(-0.4184) + c*(-0.0816) + 128))
#define MY(a,b,c) (( a* 0.2989 + b* 0.5866 + c* 0.1145))
#define MU(a,b,c) (( a*(-0.1688) + b*(-0.3312) + c* 0.5000 + 128))
#define MV(a,b,c) (( a* 0.5000 + b*(-0.4184) + c*(-0.0816) + 128))
简单写个画线的函数以说明,遍历像素修改效率很低 1920为视频宽 1080p
private void drawLineYUV(Point pnt1, Point pnt2, ref byte[] ys, ref byte[] vs, ref byte[] us, byte R, byte G, byte B)
{
//y1 = k x1 + b b = y1 - k x1
// y2 = k x2 + b k = (y2 - b)/ x2 k = (y2 - y1 - k x1)/ x2
//(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
int x1 = pnt1.X;
int x2 = pnt2.X;
int y1 = pnt1.Y;
int y2 = pnt2.Y;
double k = ;
double b = ;
if (x1 == x2)
{
int ymin = y1, ymax = y2;
if (y1 > y2)
{
ymin = y2;
ymax = y1;
}
for (int h = ymin; h <= ymin; h++)
{
int Y = (int)(0.299 * R + 0.587 * G + 0.114 * B);
ys[h * + x1] = (byte)Y;
vs[(int)((h * + x1 * ) / )] = (byte)(int)(R * 0.5000 + G * (-0.4184) + B * (-0.0816) + );
us[(int)((h * + x1 * ) / )] = (byte)(int)(R * (-0.1688) + G * (-0.3312) + B * 0.5000 + );
}
}
else
{
int ymin = y1, ymax = y2;
if (y1 > y2)
{
ymin = y2;
ymax = y1;
}
int xmin = x1, xmax = x2;
if (y1 > y2)
{
xmin = x2;
xmax = x1;
} k = (double)(ymax - ymin) / (double)(xmax - xmin);
b = ymin - k * xmin; for (int w = xmin; w < xmax; w++)
{
for (int h = ymin; h < ymax; h++)
{
if (Math.Abs(h - k * w - b) < )
{
int Y = (int)(0.299 * R + 0.587 * G + 0.114 * B);
ys[h * + w] = (byte)Y; vs[(int)((h * + w * ) / )] = (byte)(int)(R * 0.5000 + G * (-0.4184) + B * (-0.0816) + ); us[(int)((h * + w * ) / )] = (byte)(int)(R * (-0.1688) + G * (-0.3312) + B * 0.5000 + );
}
}
}
}
}
最新文章
- wxWidgets
- SVN提交时响应很慢,我是这样解决的。
- 再谈Jquery Ajax方法传递到action 【转载】
- 利用AdaBoost元算法提高分类性能
- CentOS 基本设置
- Tomcat 配置 HTTPS双向认证
- CSS3 transition规范的实际使用经验
- java web 代码
- js+css:43种常见的浏览器兼容性问题大汇总
- xml(3)--dom4j实现crud操作
- leetcode第14题--Longest Common Prefix
- C#中Invoke的用法
- maven环境变量的配置及+eclipse的配置使用
- 精选 TOP45 值得学习的Python项目
- tkinter内嵌Matplotlib系列(二)之函数曲线绘制
- 【巷子】---redux---【react】
- Linux 双网关(电信与联通)
- PowerShell “execution of scripts is disabled on this system.”
- Generalized normal distribution and Skew normal distribution
- UOJ.87.mx的仙人掌(圆方树 虚树)(未AC)
热门文章
- MongoDB学习笔记~环境搭建
- mysql 安装问题
- Eclipse下还原删除的文件
- hdu-5992 Finding Hotels(kd-tree)
- 第7章 权限管理(2)_文件特殊权限(SUID、SGID、SBIT)
- ES5/标准 ECMAScript 内置对象
- MVC FormCollection collection
- J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别
- Chrome firefox ie等浏览器空格&;nbsp;宽度不一样怎么办
- 浅谈 underscore 内部方法 group 的设计原理