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

时间:2018-01-06 08:24:42

标签: c++ graphics bgi

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

1 个答案:

答案 0 :(得分: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 colors

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

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

256 colors

如果不存在所需的颜色,则需要重新定义可由accessing VGA I/O (reading palette)完成的调色板,但如果没有IO权限访问,则无法在Windows或Linux下完成。可能你的gfx lib有一些功能在做/模仿它....

另一种方法是使用dithering,这样你就可以拍摄红色和黄色并混合它们(有些像素是红色的,附近有些黄色)。

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

如果您在该链接中看到gfxinit()功能,则可以使用例程更改256色 VGA 调色板。