C ++, как нарисовать тоновую кривую (гамму) на графике, используя функцию setpixel - PullRequest
0 голосов
/ 26 января 2012

Как упоминается в заголовке.Я пытаюсь нарисовать кривую гамма-тона, но понятия не имею, как это сделать.Я могу сделать линейную кривую тона просто отлично, но когда дело доходит до рисования кривой гамма-тона, я просто теряю ее.Как указано в http://www.mediachance.com/pseam/help/curves.html (1-й или 2-й чертеж)

Коды, как показано ниже

#include <math.h>

static COLORREF red=RGB(255,0,0);
static COLORREF blue=RGB(0,0,255);
static COLORREF green=RGB(0,255,0);

Часть, в которую я должен включиться для построения кривой гамма-тона

for(int y=0; y<bih.biHeight; y++)
            {                       
                for(int x=0; x<bih.biWidth; x++)
                {   
                SetPixel(hdc, x, bih.biHeight-x, red);
}

// The X axis of the graph

HPEN hLinePen1;
                COLORREF qLineColor1;
                qLineColor1 = RGB(255, 0, 0);
                hLinePen1 = CreatePen(PS_SOLID, 2, qLineColor1);
                hPenOld1 = (HPEN)SelectObject(hdc, hLinePen1);
                line(hdc,0, bih.biHeight, bih.biWidth, bih.biHeight);
                SelectObject(hdc, hPenOld1);
                DeleteObject(hLinePen1);
// The Y axis of the graph

                HPEN hLinePen2;
                COLORREF qLineColor2;
                qLineColor2 = RGB(255, 0, 0);
                hLinePen2 = CreatePen(PS_SOLID, 2, qLineColor2);
                hPenOld2 = (HPEN)SelectObject(hdc, hLinePen2);
                line(hdc,0, bih.biHeight, 0, bih.biWidth-bih.biHeight);
                SelectObject(hdc, hPenOld2);
                DeleteObject(hLinePen2);

1 Ответ

1 голос
/ 26 января 2012

Рисование графика должно быть простым. Для каждой имеющейся у вас точки X рассчитайте соответствующее значение Y - в случае гаммы по шкале 0-255, которая будет y = round(pow(x/255., gamma)*255). Затем просто нарисуйте линию от предыдущей точки к текущей точке.

...