在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
????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,?32,?0,?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(0,?0,?*image);
????paint.end();
????//释放空间
????if(size)
????...{
????????munmap(img,?size);
????}
????else?if(img)
????...{
????????free(img);
????}
????delete?image;
????image?=?NULL;
}?
来源:http://blog.csdn.net/skywalker_nick/article/details/1815782
...{
????...{