Посмотрев на источник для 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?
Фреймбуфер - это просто место, где вы рисуете растровую графику в памяти. Вот и все. Вы можете сделать столько кадров, сколько хотите, и делать с ними все, что хотите. –