本文共 1605 字,大约阅读时间需要 5 分钟。
shell.albert@yantai:~/project/H.264/football>ls -l fb001.yuv
-rw-r--r-- 1shell.albert users 126720 Feb 12 2002 fb001.yuv
可以看出这一帧YUV的图像大小为126720字节,
已经图像分辨率为352*240,则有
Y平面大小为352*240=84480
而根据YUV420规定,每4个Y共用一对UV,如下图
Y1 Y2
Y3 Y4
U1
V1
即每4个Y对应一个U,每4个Y对应一个V,则有
U平面大小为84480/4=21120
V平面大小为84480/4=21120
故该帧总大小为
Y+U+V=84480+21120+21120=126720
如果按照Planar平面存储方式,则先存储连接的Y,再存储连接的U,再存储连接的V,则对于该文件来讲。
前84480个字节为Y通道数据,向后21120的字节为U通道数据,再向后21120的字节为V通道数据。
好了,下面我们就用Qt来读取这个YUV文件,并使用QPainter在窗体上绘制出来。
我们先只读取Y平面的数据显示出来看看。
void MainWindow::paintEvent(QPaintEvent *e){ QPainter tPainter(this); tPainter.drawText(10,50,"hello"); QString tYUVFile("/home/shell.albert/project/H.264/football/fb001.yuv"); QFile tFile(tYUVFile); if(!tFile.open(QIODevice::ReadOnly)) { qDebug()<<"open file failed!"; return; } QByteArray tYData=tFile.read(84480); QByteArray tUData=tFile.read(21120); QByteArray tVData=tFile.read(21120); QByteArray tRestData=tFile.readAll(); qDebug()<<"Y:"<
PixelValue:4e4e4e
PixelValue:454545
PixelValue:545454
PixelValue:5c5c5c
PixelValue:484848
PixelValue:606060
PixelValue:646464
PixelValue:595959
PixelValue:666666
PixelValue:717171
PixelValue:6b6b6b
PixelValue:717171
PixelValue:6f6f6f
PixelValue:6c6c6c
PixelValue:7b7b7b
PixelValue:7e7e7e
PixelValue:7c7c7c
PixelValue:646464
PixelValue:696969
PixelValue:595959
PixelValue:606060
PixelValue:747474
PixelValue:737373
PixelValue:747474
PixelValue:6b6b6b
PixelValue:777777
PixelValue:ffffff88
PixelValue:757575
PixelValue:6b6b6b
PixelValue:6a6a6a
PixelValue:555555
PixelValue:494949
PixelValue:686868
转载地址:http://ykzji.baihongyu.com/