基于GNU libgraph 1.0.2,putpixel函数添加自定义橙色的技术求助
解决libgraph中putpixel自定义橙色的问题
嘿,我来帮你搞定这个自定义橙色的问题!你现在遇到的问题是因为libgraph(基于BGI图形库)的默认颜色索引里,12对应的是亮红色,不是你想要的印度国旗藏橙色。要使用自定义颜色,我们需要通过setrgbpalette()函数来修改调色板中对应索引的RGB值。
关键知识点
libgraph的默认16色调色板里,颜色索引对应的预设值是固定的(比如12=亮红、14=黄色),如果要使用自定义颜色,必须先调用setrgbpalette(int color_index, int red, int green, int blue)来指定对应索引的RGB分量。印度国旗的标准藏橙色(Saffron)对应的RGB值是(255, 153, 51)。
修改后的完整代码
#include<iostream> #include<graphics.h> int main() { int gd=DETECT,gm; initgraph(&gd,&gm,NULL); // 将颜色索引12设置为印度国旗的标准藏橙色 setrgbpalette(12, 255, 153, 51); int height,width; height=10; width=75; while(height!=43) { putpixel(width,height,12); // 现在这个索引对应的就是自定义橙色了 width++; if(width==225) { width=76; height++; } } getch(); closegraph(); }
额外说明
- 调色板索引选择:如果不想覆盖默认的颜色索引(比如12原本是亮红),你可以选择当前图形模式支持的其他索引。可以用
getmaxcolor()函数获取当前模式下的最大可用颜色索引,确保选择的索引在范围内。 - 后续扩展:如果你要继续绘制印度国旗的白色和绿色部分,可以用同样的方法设置对应的颜色:
- 白色:默认索引15就是
(255,255,255),无需修改 - 印度国旗标准绿色:
setrgbpalette(2, 0, 128, 0)
- 白色:默认索引15就是
- 循环优化:你当前的while循环可以改成更直观的双重for循环,代码可读性更高:
for(int h = 10; h < 43; h++){ for(int w = 75; w < 225; w++){ putpixel(w, h, 12); } }
内容的提问来源于stack exchange,提问作者Nikhil Padole
相关产品推荐
相关产品推荐

