在查看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?
答案 0 :(得分:3)
alpha组件不传输到监视器。但是,
合成器可能会使用Alpha,允许屏幕上的窗口透明。例如,您可以使用WebGL帧缓冲区中的Alpha通道在WebGL画布下显示文档。
您可以在应用程序中使用alpha组件,即使合成器不使用它。
每个像素浪费一个字节的内存比使用奇数大小的像素更方便。硬件帧缓冲器支持各种1,2和4通道格式,但只有少数3通道格式。
HDMI线缆本身可以承载各种不同的视频格式,例如RGB和YCbCr,以及子采样和位深度的变化。偶数像素格式的优势不适用于流数据。