如何在 Qt 中显示颜色数据数组中的图像?

Kar*_*lek 5 qt

我有一个char* data,其中每个字符代表像素的红/绿/蓝/alpha 值。

因此,前四个数字是第一个像素的红、绿、蓝和 alpha 值,接下来的四个数字是右侧像素的 R、G、B、A 值,依此类推。

它代表一张图片(具有先前已知的宽度和高度)。

现在,我想以某种方式获取这个数组并将其显示在 Qt 窗口上。怎么做?

我知道我应该以某种方式使用 QPixmap 和/或 QImage,但我在文档中找不到任何有用的东西。

Cal*_*itt 4

QImage旨在访问各种像素(除其他外),因此您可以执行以下操作:

QImage DataToQImage( int width, int height, int length, char *data )
{
    QImage image( width, height, QImage::Format_ARGB32 );
    assert( length % 4 == 0 );
    for ( int i = 0; i < length / 4; ++i )
    {
        int index = i * 4;
        QRgb argb = qRgba( data[index + 1], //red
                           data[index + 2], //green
                           data[index + 3], //blue
                           data[index] );   //alpha
        image.setPixel( i, argb );
    }
    return image;
}
Run Code Online (Sandbox Code Playgroud)

基于遇到另一个构造函数,您也许还可以这样做:

QImage DataToQImage( int width, int height, int length, const uchar *data )
{
    int bytes_per_line = width * 4;
    QImage image( data, width, height, bytes_per_line, 
                     QImage::Format_ARGB32 );
    // data is required to be valid throughout the lifetime of the image so 
    // constructed, and QImages use shared data to make copying quick.  I 
    // don't know how those two features interact, so here I chose to force a 
    // copy of the image.  It could be that the shared data would make a copy
    // also, but due to the shared data, we don't really lose anything by 
    // forcing it.
    return image.copy();
}
Run Code Online (Sandbox Code Playgroud)