0

我正在尝试将橙色添加到我的图形代码程序中。我正在使用 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

4

1 回答 1

0

该代码看起来像BGI (用于MS-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 种颜色,以便您仍然可以计算颜色......)您也可以使用它

从上面的链接拍摄的图像:

16色

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

这里还有来自同一链接的标准VGA 256 调色板:

256 种颜色

如果想要的颜色不存在,您需要重新定义调色板,这可以通过访问 VGA I/O(读取调色板)来完成,但在没有 IO 特权访问的 Windows 或 Linux 下是不可能的。可能您的 gfx lib 有一些功能正在执行/模拟它....

另一种方法是使用抖动,因此您将红色和黄色混合起来(附近的一些像素是红色的,有些是黄色的)。

PS使用 put pixel太慢了,你可以直接用BGI渲染填充的矩形。它支持基本的几何形状,更多的只是看看BGI文档,那里有很多。那时我不喜欢BGI并且根本没有使用它,因为直接VGA/VESA VRAM访问在任何方面都更快更好。现在使用/学习它是愚蠢的(除非你是被学校强迫的)。有很多替代方案,请参见:

如果您gfxinit()在该链接中看到该函数,则有一个更改 256 色VGA调色板的例程。

于 2018-01-06T10:06:27.983 回答