• 4126阅读
  • 3回复

很郁闷的问题,大家来看看,帮帮忙!急急急急急!!!! [复制链接]

上一主题 下一主题
离线kafeikejian
 

只看楼主 倒序阅读 楼主  发表于: 2009-11-05
先把代码贴出来:
---------------------------------------------------------------------------------------------------------------------------------------
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[i + 1];
            r = (int) bit[i + 2];
            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);
}
---------------------------------------------------------------------------------------------------------------------------------------
函数名:  RGB2Image
功能      :  将rgb的数据转换成图片
参数      :uchar * srcBuf :保存rgb数据的变量 输入参数
int w: 图片宽度  输入参数
int h:图片高度  输入参数
QImage *pDistImage:目标图片  输出参数
---------------------------------------------------------------------------------------------------------------------------------------
我在一个虚拟机下挂载了两个相同的mx27的板子,然后在不同的文件夹下运行程序,这两个程序时可以交互通信的,每当我运行这两个程序交互通信时到*pDistImage = pDistImage->transformed(matrix);这句时就出现****glibc detected****:double free or corruption (! prev):0x001600032;这样的错误,从报错的理解上是对同一地址free了两次,但是我不是很明白为什么,一直想找transformed()这个函数的里面内容也没找到,不知道这个方法使用的时候有什么问题。
另外,如果程序是和其他未用QT的产品通信,并不会出现错误,也就是说一个程序运行时是不会有问题的。
如果哪位高手知道,请告诉小弟,真的很急!
[ 此帖被kafeikejian在2009-11-05 15:34重新编辑 ]
离线318065268
只看该作者 1楼 发表于: 2009-11-05
这个函数对指针的操作很混乱。
比如:*point = qRgb(r, g, b);  这个肯定是不大对的,你都没有分配内存,却要给它赋值?

小小的函数使用了大量的指针,我是觉得,一个都没有必要使用。
所有的临时变量都直接用对象,而不用指针。强制转换的时候使用Qt的函数;
函数的参数使用引用而非指针,能够达到同样的效果还能避免很多问题。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线kafeikejian

只看该作者 2楼 发表于: 2009-11-06
恩,我也发现这段程序有很多问题,想请问下,一般的话,我们获得了一些RGB、YUV等格式的视频数据,应该如何显示到QT的界面中来啊?
谢谢你呀!
离线318065268
只看该作者 3楼 发表于: 2009-11-06
视频数据在Qt下显示我没有做过。但是在一份资料上发现了一个线索:在内存中申请一块区域,建立成帧缓冲格式,可使用QImage类或QDirectPainter类对帧缓冲进行直接绘制。其中,帧缓冲格式是关键。所需要做的工作的关键点就在于你的RGB或其它的视频格式转换成帧缓冲格式。
当然,附带的还要提供一些函数对帧缓冲中的画面进行设置。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
快速回复
限100 字节
 
上一个 下一个