Добавление определенного пользователем цвета в функцию 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
1 ответ
Код выглядит как BGI (древний графический интерфейс Borland для MS-DOS), который подразумевает либо эмуляцию BGI, либо реальную, либо эмулированную MS-DOS. Также он обычно использует только 16 цветовых режимов, поэтому вы получаете только 16 индексов для цветов из стандартной палитры EGA/VGA. Если вы используете 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 по той же ссылке:
Если требуемый цвет отсутствует, вам нужно переопределить палитру, что можно сделать с помощью доступа к VGA-вводу / выводу (чтение палитры), но это не будет возможно в Windows или Linux без привилегированного доступа к IO. Возможно, ваша библиотека gfx получила некоторые функции, выполняющие / эмулирующие ее....
Другой способ - использовать сглаживание, поэтому вы берете красный и желтый и смешиваете их (некоторые пиксели красные, а некоторые желтые рядом).
PS используя put pixel soo slooow, вы можете визуализировать заполненные прямоугольники непосредственно с помощью BGI. Он поддерживает основные геометрические фигуры и больше просто посмотрите документы BGI, там их множество. В то время я не любил BGI и вообще не использовал его, поскольку прямой доступ к VGA/VESA VRAM был намного быстрее и лучше в любом случае. Использовать / изучать его сейчас глупо (если вас не принуждают к этому в школе). Есть много альтернатив см.:
Если вы видите gfxinit()
Функция в этой ссылке есть процедура, чтобы изменить 256-цветную палитру VGA.