本人使用的是QT4,编译时红色部分出错,应该格式不正确。请问各位达人应该怎么办?
void * camera(void * pram)
{
QImage image;
QFrame * camframe = (QFrame *)pram;
QRect rect = camframe->frameRect();//
int w = rect.width();
int h = rect.height();
QPainter p(camframe);
QRgb * point;
int fb_bpp = 32;
int a,r, g, b;
int i = 0;
int x, y;
int frame = 0;
uchar *buffer;
//printf("camera started OK!\n");
image.create(width, height, fb_bpp, 0, QImage::IgnoreEndian);
v4lopen(&video);
//printf("the value of video->fd is %d\n",video.fd);
//printf("v4lopen is ok!\n");
if( v4lgetcapability(&video) <0 )
{
perror ( "v4lgetcapability");
exit(1);
}//获取设备属性
//printf("askdfalskjflakjs\n");
if ( v4lgetpicture(&video) <0 )
{
perror( "v4lgetpicture");
exit(1);
}//获取影像视窗信息
if(v4lsetpicture(&video) < 0)
{
perror("v4lsetpicture");
exit(1);
}//设置图像信息
if( v4lgrabinit(&video,width,height)<0)
{
perror( "v4lgrabinit");
exit(1);
}//初始化设备,定义获取的影像的大小
if( v4lmmap(&video) <0 )
{
perror( "v4lmmap");
exit(1);b
}//内存映射
if( v4lgrabstart(&video,frame) < 0)
{
perror( "v4lgrabstart");
exit(1);
}//开始获取影像
//printf("askdfalskjflakjs\n");
uchar *tmp = (uchar*)malloc(width*height*4);
//getQImage(img);
while(1)
{
while(v4lsync(&video,frame))
{
perror("waite");
}//等待传完一帧
//printf("inter while\n");
buffer = (uchar*)v4lgetaddress(&video,frame);//得到这一帧的地址
//buffer给出了图像的首地址,你可以选择将图像显示或保存传送......
//图像的大小为 width*height*3 这里最好建立新线程或者进程
//printf("get buffer ok\n");
for(i = 0;i < width*height;i++)
{
tmp[i*4+0] = buffer[i*3+0];
tmp[i*4+1] = buffer[i*3+1];
tmp[i*4+2] = buffer[i*3+2];
tmp[i*4+3] = 130;
}
QImage img(tmp,width,height,32,NULL,0,QImage::LittleEndian);
//LittleEndian则是低地址存放最低有效字节
//printf("for is ok\n");
p.drawImage(0,0,img);//如果图片需要被转换为像素映射
//printf("brightness value is %d\n",brightness);
if(Setting)
{
v4lsetpicture(&video);
Setting = 0;
}
if(bCapture)
{
writeImageToFile(buffer);
bCapture = 0;
}
frame = (frame+1)%2;//下一帧的frame
if ( v4lcapture(&video,frame) < 0)
{
perror( "v4lcapture");
exit(1);
}//获取下一帧
}
pthread_exit(NULL);
}