Qt环境下,RGB24与QImage在RGB16Qt中的等价转换如何实现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计725个文字,预计阅读时间需要3分钟。
收集几个有用的网站内容是关于RGB24与YUV转换的。以下是一段代码示例:
cunsigned int convertYUVtoRGB(int y, int u, int v) { int r, g, b; r=y + 1.402 * (v - 128); g=y - 0.344136 * (u - 128) - 0.714136 * (v - 128); b=y + 1.772 * (u - 128); return (r <<16) + (g << 8) + b;}
收藏几个有用的网站内容是关于RGB24的问题unsignedintconvertYUVtoRGB(inty,intu,intv){intr,g,b;ry(int)(收藏几个有用的网站内容是关于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; }
本文共计725个文字,预计阅读时间需要3分钟。
收集几个有用的网站内容是关于RGB24与YUV转换的。以下是一段代码示例:
cunsigned int convertYUVtoRGB(int y, int u, int v) { int r, g, b; r=y + 1.402 * (v - 128); g=y - 0.344136 * (u - 128) - 0.714136 * (v - 128); b=y + 1.772 * (u - 128); return (r <<16) + (g << 8) + b;}
收藏几个有用的网站内容是关于RGB24的问题unsignedintconvertYUVtoRGB(inty,intu,intv){intr,g,b;ry(int)(收藏几个有用的网站内容是关于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; }

