收藏几个有用的网站内容是关于RGB24的问题
unsigned int convertYUVtoRGB(int y, int u, int v) {
int r,g,b;
r y (int)(1.402f*v);
g y - (int)(0.344f*u 0.714f*v);
b y (int)(1.772f*u);
r r>255? 255 : r<0 ? 0 : r;
g g>255? 255 : g<0 ? 0 : g;
b b>255? 255 : b<0 ? 0 : b;
return 0xff000000 | (b<<16) | (g<<8) | r;
}
unsigned int * convertYUV420_NV21toRGB8888(unsigned char data[78080], int width, int height) {
int size width*height;
int offset size;
unsigned int * pixels new unsigned int[size];
int u, v, y1, y2, y3, y4;
// i percorre os Y and the final pixels
// k percorre os pixles U e V
for(int i0, k0; i y1 data[i ] y2 data[i1] y3 data[widthi ] y4 data[widthi1] u data[offsetk ] v data[offsetk1] u u-128; v v-128; pixels[i ] convertYUVtoRGB(y1, u, v); pixels[i1] convertYUVtoRGB(y2, u, v); pixels[widthi ] convertYUVtoRGB(y3, u, v); pixels[widthi1] convertYUVtoRGB(y4, u, v); if (i!0 2)%width0) iwidth; } return pixels; } int main(int argc, char *argv[]) { QApplication a(argc, argv); unsigned char * buffer; unsigned int * image NULL; QPixmap pixmap; QImage img(352, 288, QImage::Format_ARGB32_Premultiplied); img.fill(QColor(Qt::white).rgb()); ofstream outfile ("debug.txt",ofstream::binary); ifstream is; is.open ("sample00.yuv", ios::binary ); // is.seekg (0, ios::end); // length is.tellg(); // is.seekg (0, ios::beg); buffer new unsigned char[101376]; is.read((char * )buffer,101376); is.close(); for(int x0; x<101376; x) { outfile.write((char*)buffer x, 1); } outfile.close(); /* for (int x 0; x <10; x) { for (int y 0; y <10; y) { img.setPixel(x, y, qRgb(0, 0, 0)); } } */ for(int i 0; i <101376; i) qDebug() < image convertYUV420_NV21toRGB8888(buffer,352,288); QByteArray byteImage((const char *)image); pixmap.loadFromData(byteImage); QLabel myLabel; myLabel.setPixmap(pixmap); myLabel.setGeometry(20,100,320,122); myLabel.show(); return a.exec(); } 还有一段例子 /* pDistImage new QImage(w, h, 32) */ void RGB2Image(char *srcBuf, int w, int h, QImage *pDistImage) { int i; int r, g, b; QRgb *point; uchar *bit; i 0; bit (uchar *)(srcBuf); for(int y 0; y for ( int x 0; x /* Please attion the Littile-Edian and Big-Edian, * The Order maybe R-G-B. */ b (int)bit[i]; g (int)bit[i1]; r (int)bit[i2]; point (QRgb *)pDistImage->scanLine(y) x; *point qRgb(r, g, b); i 3; } } return 0; }