gpt4 book ai didi

c - 在 C : OSdev 中绘制像素

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:40 25 4
gpt4 key购买 nike

我完全是 osdeving 的初学者。现在我已经按照 osdevwiki 实现了键盘和 VGA 屏幕。现在我想像这样画出合适的像素

void drawPixel(int x, int y, int rgb)

在独立的 C 语言中。现在,在 VGA 模式下,用于打印文本和颜色的地址是 0xB8000。要在屏幕上绘制像素,我该怎么做?我没有任何线索。

最佳答案

此处讨论文本模式:

https://wiki.osdev.org/Text_mode

这里有一个在文本模式下写彩色字符的例子:

void WriteCharacter(unsigned char c, unsigned char forecolour, unsigned char backcolour, int x, int y)
{
uint16_t attrib = (backcolour << 4) | (forecolour & 0x0F);
volatile uint16_t * where;
where = (volatile uint16_t *)0xB8000 + (y * 80 + x) ;
*where = c | (attrib << 8);
}

如果你想在图形模式下写入 RGB 像素,你必须先切换到不同的视频模式。

这里解释一下:

https://wiki.osdev.org/Drawing_In_Protected_Mode

以下是该页面中有关如何在图形模式下绘制像素的代码:

/* only valid for 800x600x16M */
static void putpixel(unsigned char* screen, int x,int y, int color) {
unsigned where = x*3 + y*2400;
screen[where] = color & 255; // BLUE
screen[where + 1] = (color >> 8) & 255; // GREEN
screen[where + 2] = (color >> 16) & 255; // RED
}

/* only valid for 800x600x32bpp */
static void putpixel(unsigned char* screen, int x,int y, int color) {
unsigned where = x*4 + y*3200;
screen[where] = color & 255; // BLUE
screen[where + 1] = (color >> 8) & 255; // GREEN
screen[where + 2] = (color >> 16) & 255; // RED
}

基本上,您需要将三个颜色值写入从视频内存开始的三个字节,然后偏移坐标乘以一些值以获得正确的行和列。

不同视频模式的值不同。

请注意,对于 VGA/CGA/EGA 模式,甚至视频内存地址也是不同的!

关于c - 在 C : OSdev 中绘制像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53776878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com