在函数 putpixel(int x,int y,int color) 中添加用户定义的颜色

Adding user-defined color in function putpixel(int x,int y,int color)

我正在尝试将橙色添加到我的图形代码程序中。我正在使用 putpixel(int x, int y, int color) 函数来添加颜色。此功能不允许我这样做。这是我的代码,请帮我解决这个问题

 #include<iostream>
 #include<graphics.h>
 int main()
        {
        int gd=DETECT,gm;
        initgraph(&gd,&gm,NULL);
        int height,width;
        height=10;
        width=75;
        while(height!=43)
            {
            putpixel(width,height,12); //here i want to add orange color
            width++;
            if(width==225)
                {
                width=76;
                height++;
                }
            }
        getch();
        closegraph();
        } 

我正在尝试制作一面印度国旗。我正在使用 GNU lib libgraph 1.0.2

代码看起来像 BGIMS-DOS 的古代 Borland 图形界面),这意味着 BGI 或真实的或模拟的 MS-DOS。此外,它通常仅使用 16 种颜色模式,因此您只能从标准 EGA/VGA 调色板中获得 16 种颜色索引。如果您使用 256 色,您将获得标准 VGA 调色板。

这一行:

putpixel(width,height,12);

数字 12 是使用的颜色,因此您需要找到哪个数字是您想要的橙色。您可以通过渲染整个调色板来做到这一点:

for (x=0;x<16<<2;x++)
 for (y=0;y<16;y++)
  putpixel(x,y,x>>2);

并从左侧开始计算索引(从零开始计算 256 种颜色,这样您仍然可以计算颜色......)您也可以使用此

从上面拍摄的图像link:

数字是十六进制的,所以 12 = 0x0C 是红色的。如果您的输出颜色与相同调色板的颜色相似...如果不是,则意味着您有不同的调色板(可能是 Linux 或 WEB 调色板)

这里还有来自相同 link:

的标准 VGA 256 调色板

如果想要的颜色不存在,您需要重新定义调色板,这可以通过 accessing VGA I/O (reading palette) 完成,但在没有 IO 权限访问的情况下 Windows 或 Linux 是不可能的。可能你的 gfx 库有一些功能 doing/emulating 它....

另一种方法是使用 ,这样你就可以把红色和黄色混合起来(有些像素附近是红色的,有些是黄色的)。

PS 使用 put 像素 soo slooow 你可以直接用 BGI[ 渲染填充的矩形=64=] 代替。它支持基本的几何形状,更多请参阅 BGI 文档,那里有很多。当时我不喜欢 BGI 并且根本没有使用它,因为直接 VGA/VESA VRAM 访问速度更快更好反正。 Using/learning 现在很傻(除非你被学校强迫)。有很多选择见:

  • Graphics rendering in C/C++

如果您在 link 中看到 gfxinit() 函数,则有一个例程可以更改 256 色 VGA 调色板。