echo 'narcissus'

Trends in Cloud Computing

在QT中通过摄像头动态显示图片

在QT中通过摄像头动态显示图片

Camgui::Camgui(QWidget *parent, const char *name, int wFlags):QWidget(parent, name, wFlags)
{
    
//之前的代码略
    
//创建一个QTimer的对象进行计时,间隔刷新窗体
    
//在这里使用update()
    
//与repaint比起来,这个SLOT可以避免闪屏
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), SLOT(update()));
    timer
->start(30);
}


void Camgui::paintEvent(QPaintEvent *e)
{
    
int x, y;
    
int i = 0;
    QRgb 
*point;
    
int r, g, b;

    
//创建该PaintEvent的操作对象paint
        //该对象为静态对象,不需要每次paint都创建一个QPainter
    static QPainter paint(this);

    
//该步很重要,设置标志
    
//让QWidget在更新窗体时,不擦除原来的窗体
    
//这样可以避免闪屏
    setWFlags(getWFlags() | Qt::WRepaintNoErase);

    
//从摄像头获取图像信息到img指向的内存空间
    img = get_image(dev, width, height, palette, &size);

    
//读取内存内容,创建QImage对象
    image = new QImage;
    
if(image->create(width, height, 320, QImage::IgnoreEndian))
    
{
        
for(x = 0; x < height; x++)
        
{
            
for(y = 0; y < width; y++)
            
{
                r 
= (int)img[i+2];
                g 
= (int)img[i+1];
                b 
= (int)img[i];
                point 
= (QRgb *)image->scanLine(x)+y;
                
*point = qRgb(r, g, b);
                i 
+= 3;
            }

        }

    }


    
//开始绘图
    paint.begin(this);
    paint.
drawImage(00*image);
    paint.
end();

    
//释放空间
    if(size)
    
{
        munmap(img, size);
    }

    
else if(img)
    
{
        free(img);
    }

    delete image;
    image 
= NULL;
}

阅读更多
个人分类: QT GUI
上一篇ARM ATC 练习
下一篇基于S3C2410平台的LCD for Linux 2.6 驱动移植
想对作者说点什么? 我来说一句

qt实时显示摄像头图片

2010年06月02日 95KB 下载

没有更多推荐了,返回首页

关闭
关闭