Linux框架使用ARGB32。 Α?帧缓冲如何支持Alpha?

时间:2015-04-20 06:50:32

标签: linux qt fpga framebuffer alphablending

在查看Qt的来源之后,看来它和帧缓冲区一般都是support alpha transparency

static QImage::Format determineFormat(const fb_var_screeninfo &info, int depth)
{
    const fb_bitfield rgba[4] = { info.red, info.green,
                                  info.blue, info.transp };

    QImage::Format format = QImage::Format_Invalid;

    switch (depth) {
    case 32: {
        const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0},
                                         {0, 8, 0}, {24, 8, 0}};
        const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0},
                                         {16, 8, 0}, {24, 8, 0}};
        if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) {
            format = QImage::Format_ARGB32;
        } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) {
            format = QImage::Format_RGB32;
        } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) {
            format = QImage::Format_RGB32;
            // pixeltype = BGRPixel;
        }
        break;
    }
    // code ommited
}

如果帧缓冲支持alpha是什么意思?帧缓冲区通常不代表监视器吗?

我正在研究在FPGA芯片上发送用于视频覆盖的HDMI通道的可能性similar to this users question

我想知道如果我有一个外置显示器,那么有些怎么样在linux中注册自己的深度为32位,带有alpha通道,这会被发送到HDMI?

1 个答案:

答案 0 :(得分:3)

alpha组件传输到监视器。但是,

  • 合成器可能会使用Alpha,允许屏幕上的窗口透明。例如,您可以使用WebGL帧缓冲区中的Alpha通道在WebGL画布下显示文档。

  • 您可以在应用程序中使用alpha组件,即使合成器不使用它。

  • 每个像素浪费一个字节的内存比使用奇数大小的像素更方便。硬件帧缓冲器支持各种1,2和4通道格式,但只有少数3通道格式。

HDMI线缆本身可以承载各种不同的视频格式,例如RGB和YCbCr,以及子采样和位深度的变化。偶数像素格式的优势不适用于流数据。