如何使用C通过显存绘制像素?
How to draw a pixel through video memory using C?
问题:
我已按照 https://wiki.osdev.org/Drawing_In_Protected_Mode 上的教程进行操作,但在使用给定函数绘制像素时遇到问题。
我做了什么:
1. 将引导加载程序中使用 BIOS 中断的视频模式从 http://www.columbia.edu/~em36/wpdos/videomodes.txt table 更改为 113h(VBE);
2.使用给定的函数访问显存
/* 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
}
摘自文章,显存在宏中
#define VGA 0xA0000
- 并尝试如下调用它
putpixel(VGA, 10, 10, 3);
- 通过使用循环尝试显示更多像素来确保这不是由于像素太小造成的
结果:
预期:QEMU 屏幕上的一个像素
实际:无
您的像素接近黑色,颜色为 <0, 0, 3>。您可以尝试将其称为
putpixel(VGA, 10, 10, 0x00FFFFFF);
这会在屏幕上放置一个漂亮的白色像素。
问题:
我已按照 https://wiki.osdev.org/Drawing_In_Protected_Mode 上的教程进行操作,但在使用给定函数绘制像素时遇到问题。
我做了什么:
1. 将引导加载程序中使用 BIOS 中断的视频模式从 http://www.columbia.edu/~em36/wpdos/videomodes.txt table 更改为 113h(VBE);
2.使用给定的函数访问显存
/* 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
}
摘自文章,显存在宏中
#define VGA 0xA0000
- 并尝试如下调用它
putpixel(VGA, 10, 10, 3);
- 通过使用循环尝试显示更多像素来确保这不是由于像素太小造成的
结果:
预期:QEMU 屏幕上的一个像素
实际:无
您的像素接近黑色,颜色为 <0, 0, 3>。您可以尝试将其称为
putpixel(VGA, 10, 10, 0x00FFFFFF);
这会在屏幕上放置一个漂亮的白色像素。