如何实现RGB24与QImage在Qt下的RGB16位深度图像对等转换?
- 内容介绍
- 文章标签
- 相关推荐
本文共计719个文字,预计阅读时间需要3分钟。
收藏几个有用的网站内容是关于RGB24的问题,例如:- `unsigned int convertYUVtoRGB(int y, int u, int v)` 函数实现。- 转换公式:`r=y + 1.402 * (v - 128);` - 更多相关信息可在以下网站查找:[网站链接]
收藏几个有用的网站内容是关于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; }
本文共计719个文字,预计阅读时间需要3分钟。
收藏几个有用的网站内容是关于RGB24的问题,例如:- `unsigned int convertYUVtoRGB(int y, int u, int v)` 函数实现。- 转换公式:`r=y + 1.402 * (v - 128);` - 更多相关信息可在以下网站查找:[网站链接]
收藏几个有用的网站内容是关于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; }

