c - 如何使用C通过显存绘制像素?

标签 c pixel vga

问题:
我已按照 https://wiki.osdev.org/Drawing_In_Protected_Mode 上的教程进行操作并在使用给定函数绘制像素时遇到问题。

我做了什么:
1. 使用引导加载程序中的 BIOS 中断将视频模式从 http://www.columbia.edu/~em36/wpdos/videomodes.txt 更改为 113h(VBE) table ;
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   
  1. 并尝试如下调用它
putpixel(VGA, 10, 10, 3);
  1. 通过使用循环尝试显示更多像素,确保这不是由于像素太小

结果:
预期:QEMU 屏幕上的一个像素
实际:无

最佳答案

你的像素几乎是黑色的,它的颜色是 <0, 0, 3>。您可以尝试将其称为

putpixel(VGA, 10, 10, 0x00FFFFFF); 

这会在屏幕上放置一个漂亮的白色像素。

关于c - 如何使用C通过显存绘制像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56066333/

相关文章:

c++ - 仅在 C/C++ 中使用 header 时?

c - GNU/Linux下获取fgetc处理Mac OS CR

c++ - 将图像加载到现有的 Mat 中

Android - 通过字符串修复 TextView 宽度

javascript - 从图像中获取像素颜色

c - RK 积分器中的长 double 误差饱和

assembly - assembly x86-16 中的模式 X,为什么平面 1 未打印,而所有其他平面的顺序不正确?

assembly - 如何在 tasm 中在屏幕上打印 SVGA 信息?

Java自定义组件像素颜色