【问题标题】:Adding user-defined color in function putpixel(int x,int y,int color)在函数 putpixel(int x,int y,int color) 中添加用户定义的颜色
【发布时间】:2018-01-06 08:24:41
【问题描述】:

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

【问题讨论】:

  • #include&lt;graphics.h&gt; 不是标准的 C++,而且这个名字太笼统了,我不知道你说的是哪个第三方库。最重要的是,代码可能甚至无法编译,除非神秘的graphics.h 头文件定义了两个全局变量heightwidth
  • 但是现在代码已经编辑了更多信息,这个猜测是错误的。
  • @ChristianHackl 感谢您清除我,我认为 graphics.h 来自标准 c++,所以我没有发布任何有关该库的信息。对不起,再一次

标签: c++ graphics bgi


【解决方案1】:

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

以上链接截图:

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

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

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

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

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

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

【讨论】:

  • ...谢谢您的详细回答..学校强迫我学习这些东西
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多