qt快速加载图⽚_QT显⽰图⽚-landuochong-ChinaUnix博客分类: C/C++
2010-03-16 10:29:18
从该⽹站收集的所有有⽤的帖⼦/
//
希望有⼈做过
//
qt 下显⽰内存⾥的图像数据
请教⼤家⼀个问题:
我现在有⼀Buffer⾥存放了16bit 的图像数据,我想让它在QT程序⾥显⽰出来该怎么办呢?
在之前我⽤Qimage 类构造⼀个image图,但显⽰出来的图像颜⾊不对。实现的过程如下 :
Buffer:存放了图像数据
QImage image = new QImage(Buffer,Width,Height,16,0,1,QImage::IgnoreEndian);
QPainter p(this);
p.begin(this);
p.drawImage(0,0,*image);
请⼤家给点建议,有没有更好的⽅法去实现?
///
求教QT下显⽰视频的⽅法(急⽤啊~~)
各位⼤虾:
我现在想做QT下显⽰经过⽹络传输过来的BMP图⽚的界⾯,是否可以⽤QImage 这个类来实现呢?
如果可以的话应该怎样做呢?(我看过QImage 这个类好像很多东西啊,应该不⽤全部都⽤上吧!)
如果QImage 这个类不能实现的话,那应该怎样实现呢?希望得到各位的帮助,先谢谢了!!
⽤QLabel可查看图像,由QImage或者QPixmap创建
QPixmap img;
img.loadFromData();//在参数中加载图像数据
然后
QLabel::setPixmap(img);
/
我做了⼀个简单的尝试:
HWWidget::HWWidget(QWidget * parent, const char *name, WFlags f)
: QWidget( parent, name, f)
{
left = 0;
top = 160;
width =240;
height = 160;
mPixmap = QPixmap("./bicycle.jpg");
//setBackground(Noground);
show();
}
void HWWidget::paintEvent(QPaintEvent * /*e*/)
{
QPainter p( this);
static int times = 1;
static int yoffset = 8;
{
setGeometry( 0, 320-times*yoffset, 240,times*yoffset);
p.drawPixmap(0, 0, mPixmap, 0, 0, -1, -1);
times++;
usleep(500000);
}
}
这样的效果能出来⼀点,就是图⽚bicycle.jpg能动画的划出来,存在三个问题:
1.是个死循环,可能是因为setGeometry也会引发
2.只有bicycle.jpg图便能有动画效果,但是widget看不到他的默认的
3.可能运算太多,arm处理器不能很好的⽀持
所以,请问,QT有没有好⼀点的接⼝,⽀持整个widget也⼀起想抽屉⼀样的划出来,
类似与QQ的主界⾯,从隐藏状态显⽰出来的时候,是⼀个划出来的效果..可以从左到右,从上到下,甚⾄从下到上的划出来...⾮常感谢您的帮助
///
图⽚显⽰出现的错误,帮忙分析⼀下阿
下⾯的程序只显⽰了⼀下,就没了。⽽且没显⽰图⽚,请打下帮忙分析⼀下,不胜感激!
//while(1)
{
buffer=v4lsyn(dev1,i);
repaint();
v4lcapture(dev1);
}
void imageprocess::paintEvent( QPaintEvent * )
{
paint=new QPainter(this);
paint->begin(this);
label = new QLabel(this);
QImage *img=new QImage((unsigned char*)buffer,640,480,8,0,1,QImage::IgnoreEndian); QPixmap tmp;
tmp=*img;
label->setPixmap(tmp);
fprintf (stderr, "readjusting width to %d\n", *buffer);
paint->end();
}
下⾯是调试时显⽰的错误:
QPainter::begin: Painter is already active.
You must end() the painter before a second begin()
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1084981632 (LWP 6669)]
0x0804d70b in imageprocess::paintEvent(QPaintEvent*) (this=0xbfffe540)
at imageprocess.cpp:243
243 fprintf (stderr, "readjusting width to %d\n", *buffer
如果把while 前的//去掉,就完全打不开界⾯,本⼈很是疑惑,这个问题也帮忙分⼀下,
label->setPixmap(tmp);
应该是paint->drawImage(5,5,img)
刚才发错了
paint =new QPainter(this);
定义是在paintEvent外了,
你将paint定义移到paintEvent函数内部
///
请问关于QImage Class 的问题
各位⼤虾:
我现在想做QT下显⽰经过⽹络传输过来的BMP图⽚的界⾯,是否可以⽤QImage 这个类来实现呢?如果可以的话应该怎样做呢?(我看过QImage 这个类好像很多东西啊,应该不⽤全部都⽤上吧!)
如果QImage 这个类不能实现的话,那应该怎样实现呢?希望得到各位的帮助,先谢谢了!!
loadFromData()来加载图像,并通过QLabel来显⽰
/
///
关于摄像头捕捉图像2
我做的不知道是不是和obrire的⼀样,但我想摄像头数据截取不分应该是差不多的,
源代码我是不能说的,因为像obrire说的涉及到商业.
基本流程是这样的:先调⽤系统函数open(dev,O_RDWR);然后开辟共享内存adrr=mmap();adrr是内存⾸地址;
再调⽤ioctl (dev, VIDIOCMCAPTURE, &vid_mmap);ioctl (dev, VIDIOCSYNC, &vid_mmap.frame);得到图像;然后再操作adrr就⾏了;
注意:没⽤每⽤完⼀次mmap()要记得把他销毁munmap(adrr, size);不然它会从新开辟另⼀块内存.直到系统内存
被⽤完.
显⽰的时候建议先把图像数据拷贝到⾃⼰开辟的内存⾥再对数据进⾏处理,显⽰\压缩什么的随你;
显⽰我的思想⽅法是,先创建⼀个Image;然后把数据放到Image⾥;最后painter出来;
skyly2222,你能不能把最后⼀步image(),这个参数,我设置不好..,显⽰效果烂的很..
我只需要⼏⾏代码,就是qt部分,其他部分,我已经做完了。
你能⽤的是
QImage ( uchar * yourdata, int w, int h, int depth, QRgb * colortable, int numColors, Endian bitOrder );这个函数吧?
这个函数我试过,不⾏,因为colortable设置不好会倒置象素放⼤或缩⼩造成图像混乱;
我是这样解决的.
QRgb rgb;
QPainter *paint=new QPainter;
i=0;
ate(width,height,32,0,QImage::IgnoreEndian))
{ for (x = 0; x < height ; x++) {
for (y = 0; y r=(int)bit[i+2];
g=(int)bit[i+1];
b=(int)bit;
uint *pp = (uint *)bm.scanLine(x) + y;
*pp = qRgb(r,g,b);
i=i+3;
}
}
}
我想请教skly22222,我按照上⾯步骤写了⼀个数据采集程序,在QT程序中把它作为 .c⽂件在⼯程编译的时候出了问题,原因好像是这部分关于linux下的头⽂件不到,但把这个程序作为.h⽂件时就没有这种问题了,想知道这部分程序是否可以作为.h⽂件调⽤,另外我上⾯问题怎么解决。路过的各位⼤侠也请不吝赐教,谢谢!!
skly22222,多谢了,我在⽤图像处理作毕业设计,也是刚⽤QT,你的这些代码很有⽤,QT资料太少了,尤其在图像处理这⼀⽅⾯,有没有好的⽹站或资料介绍⼀下,让我们少⾛些弯路!
还是摄像头问题,能显⽰但没标题栏,⽆法控制它
部分源码⽤的如下
mmap格式怎么打开paint=new QPainter(this);
paint->begin(this);
v4l_open("/dev/video0",&device);
unsigned char *data = GrabData();
int x,y;
int i=0;
QImage img;
QRgb *point;
int r,g,b;
ate(480,320,32,0,QImage::IgnoreEndian))
{
for(x=0;x<320;x++)
{
for(y=0;y<480;y++)
{
r=(int)data[i+2];
g=(int)data[i+1];
b=(int)data;
point = (QRgb *) img.scanLine(x)+y;
*point = qRgb(r,g,b);
i+=3;
}
}
}
paint->drawImage(10,10,img);
我现在根据上⾯给出的摄像头的⼀段程序,⾃⼰把它写全,已能在板⼦上显⽰了,但是那个图像没含最
⼤化、最⼩化、关闭按钮的标题栏,请问能把它画在label或是其他qt的类上吗?怎么画呢,我还想加⼀个按钮来关闭端⼝。谢谢!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论