标题:很郁闷的问题,大家来看看,帮帮忙!急急急急急!!!!
作者:kafeikejian
日期:2009-11-05 15:28
内容:
先把代码贴出来:
---------------------------------------------------------------------------------------------------------------------------------------
void Video::RGB2Image(uchar *srcBuf, int w, int h, QImage *pDistImage) {
int i;
int r, g, b;
QRgb *point;
uchar *bit;
i = 0;
bit = (uchar *) (srcBuf);
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
/* Please attion the Littile-Edian and Big-Edian,
* The Order maybe R-G-B.
*/
b = (int) bit;
g = (int) bit;
r = (int) bit;
point = (QRgb *) pDistImage->scanLine(y) + x;
*point = qRgb(r, g, b);
i += 3;
}
}
/*矩阵转换功能,将图像的纵坐标倒置*/
QMatrix matrix;
matrix.scale(1, -1);
printf ("point = %ld\nbit = %ld\npDistImage = %ld\n", point, bit, pDistImage);
*pDistImage = pDistImage->transformed(matrix);
}
------------------------------------------------------------------------------------------------------------------------------------ ..
#1 [318065268 11-05 16:47]
这个函数对指针的操作很混乱。
比如:*point = qRgb(r, g, b);这个肯定是不大对的,你都没有分配内存,却要给它赋值?
小小的函数使用了大量的指针,我是觉得,一个都没有必要使用。
所有的临时变量都直接用对象,而不用指针。强制转换的时候使用Qt的函数;
函数的参数使用引用而非指针,能够达到同样的效果还能避免很多问题。
#2 [kafeikejian 11-06 09:14]
恩,我也发现这段程序有很多问题,想请问下,一般的话,我们获得了一些RGB、YUV等格式的视频数据,应该如何显示到QT的界面中来啊?
谢谢你呀!
#3 [318065268 11-06 10:39]
视频数据在Qt下显示我没有做过。但是在一份资料上发现了一个线索:在内存中申请一块区域,建立成帧缓冲格式,可使用QImage类或QDirectPainter类对帧缓冲进行直接绘制。其中,帧缓冲格式是关键。所需要做的工作的关键点就在于你的RGB或其它的视频格式转换成帧缓冲格式。
当然,附带的还要提供一些函数对帧缓冲中的画面进行设置。