30天自制操作系统

void set_palette(unsigned char *rgb)
{
             
              int i, eflags;
             
              eflags = io_load_eflags();               
              io_cli();                                                         
              io_out8(0x03c8, 0);
             
              for (i = 0; i <= 15; i++) {
                            io_out8(0x03c9, rgb[0] / 4);
                            io_out8(0x03c9, rgb[1] / 4);
                            io_out8(0x03c9, rgb[2] / 4);
                            rgb += 3;
              }
              io_store_eflags(eflags);    
              return;
}

为什么

io_out8(0x03c9, rgb[0] / 4);
要除以4?


想起windows程序设计有调色板一节,

显示卡上的调色盘对照表运作过程如下图所示:
在8位显示模式中,每个图素占8位。图素值查询包含256RGB值的对照表的地址。这些RGB值可以正好24位宽,或者小一点,通常是18位宽(即主要的红、绿和蓝各6位)。每种颜色的值都输入到数字模拟转换器,以得到发送给监视器的红、绿和蓝三个模拟信号。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值