2015-04-20 6 views
1

Посмотрев на источник для Qt, кажется, что он и фреймбуферы в целом, support alpha transparency.Linux фреймбуферы с ARGB32. Альфа? Как фреймбуфер поддерживает Alpha?

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 
} 

Что означает, если фреймбуфер поддерживает альфа? Разве кадры не представляют собой мониторы?

Я изучаю возможность отправки альфа-канала через HDMI для наложения видео на микросхеме FPGA, similar to this users question.

Мне интересно, что если у меня есть внешний монитор, то некоторые пользователи регистрируются в Linux, чтобы иметь глубину 32 бит с альфа-каналом, с помощью которого вы получаете HDMI?

+0

Фреймбуфер - это просто место, где вы рисуете растровую графику в памяти. Вот и все. Вы можете сделать столько кадров, сколько хотите, и делать с ними все, что хотите. –

ответ

3

Альфа-компонент не передается на монитор. Но,

  • Alpha может использоваться композитором, позволяя прозрачному окну на экране. Например, вы можете использовать альфа-канал в фреймбуфере WebGL, чтобы отобразить документ под холстом WebGL.

  • Вы можете использовать альфа-компонент в своем приложении, даже если композитор его не использует.

  • Удобнее тратить байт памяти на пиксель, чем на пиксель нечетного размера. Аппаратные фреймбуфферы поддерживают различные форматы 1, 2 и 4 канала, но только несколько трехканальных форматов.

Сам кабель HDMI может нести небольшое разнообразие различных видео форматов, такие как RGB и YCbCr, с вариациями в прореживании и битовой глубине. Преимущество форматов пикселей с четным размером не распространяется на потоковые данные.