如何实现RGB24与QImage在Qt下的RGB16位深度图像对等转换?

2026-04-02 14:061阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计719个文字,预计阅读时间需要3分钟。

如何实现RGB24与QImage在Qt下的RGB16位深度图像对等转换?

收藏几个有用的网站内容是关于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();

如何实现RGB24与QImage在Qt下的RGB16位深度图像对等转换?

// 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;

}

标签:RGB24QI

本文共计719个文字,预计阅读时间需要3分钟。

如何实现RGB24与QImage在Qt下的RGB16位深度图像对等转换?

收藏几个有用的网站内容是关于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();

如何实现RGB24与QImage在Qt下的RGB16位深度图像对等转换?

// 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;

}

标签:RGB24QI