- •Що таке роздільна здатність?
- •Що таке конвертація даних графічних форматів та якими технічними засобами
- •Як створити векторне зображення та здійснити зміни у ньому засобами Корела?
- •Яким чином здійснювати масштабування растрових і векторних зображень
- •Як здійснюється змішування кольору на комп’ютері?
- •Охарактеризуйте основні схеми стискання зображень
- •14. Охарактеризуйте засоби створення текстур
- •15. Апаратна та програмна підтримка графіки
- •16. Для чого необхідно підключення драйверів монітора при програмуванні графіки
- •18. Які базові процедури і функції роботи з графікою ви знаєте?
- •19. Яким чином здійснюється переключення між текстовим і графічним режимом?
- •20. Які особливості має координатна сітка екрану в графічному режимі
- •21. Що таке поточний покажчик?
- •22. Яким чином здійснюється керування кольором і стилем геометричних фігур і тексту що виводиться?
- •23. Що таке відео сторінка?
- •25. Методи пастеризації кола і еліпса
21. Що таке поточний покажчик?
22. Яким чином здійснюється керування кольором і стилем геометричних фігур і тексту що виводиться?
23. Що таке відео сторінка?
Пам’ять відеобуфера підрозділяється на відеосторінки. Їхня кількість залежить від потокового режиму і типу адаптера. Більше однієї сторінки мають відеокарти EGA, VGA, Hercules. Нумерація сторінок починається з нуля. У кожний момент часу на екрані монітора може бути видимою одна сторінка. За замовчуванням це сторінка з номером 0. Сторінка, на якій у даний момент формується зображення, називається активною.
Для роботи зі сторінками передбачені дві процедури: setactivpage(int page) – встановлює активну сторінку для побудови зображення, при цьому створюваний рисунок не відображається на екрані. Після побудови зображення можна візуалізувати цю сторінку за допомогою процедури setvisualpage(int page).
24. Алгоритм Брезенхема для лінії: Для линии
void drawLine(int x1, int y1, int x2, int y2)
{
int deltaX = abs(x2 - x1);
int deltaY = abs(y2 - y1);
int signX = x1 < x2 ? 1 : -1;
int signY = y1 < y2 ? 1 : -1;
int error = deltaX - deltaY;
for (;;)
{
setPixel(x1, y1);
if(x1 == x2 && y1 == y2)
break;
int error2 = error * 2;
if(error2 > -deltaY)
{
error -= deltaY;
x1 += signX;
}
if(error2 < deltaX)
{
error += deltaX;
y1 += signY;
}
}
}
25. Методи пастеризації кола і еліпса
Алгоритм Брезенхема для окружности
void drawCircle(int x0, int y0, int radius) {
int x = 0;
int y = radius;
int delta = 2 - 2 * radius;
int error = 0;
while(y >= 0) {
setPixel(x0 + x, y0 + y);
setPixel(x0 + x, y0 - y);
setPixel(x0 - x, y0 + y);
setPixel(x0 - x, y0 - y);
error = 2 * (delta + y) - 1;
if(delta < 0 && error <= 0) {
++x;
delta += 2 * x + 1;
continue;
}
error = 2 * (delta - x) - 1;
if(delta > 0 && error > 0) {
--y;
delta += 1 - 2 * y;
continue;
}
++x;
delta += 2 * (x - y);
--y;
}
}
Для эллипса
void ellipse(int x, int y, int a, int b, int color)
{
int col,i,row,bnew;
long a_square,b_square,two_a_square,two_b_square,four_a_square,four_b_square,d;
b_square=b*b;
a_square=a*a;
row=b;
col=0;
two_a_square=a_square<<1;
four_a_square=a_square<<2;
four_b_square=b_square<<2;
two_b_square=b_square<<1;
d=two_a_square*((row-1)*(row))+a_square+two_b_square*(1-a_square);
while(a_square*(row)>b_square*(col))
{
putpixel(col+x,row+y,color);
putpixel(col+x,y-row,color);
putpixel(x-col,row+y,color);
putpixel(x-col,y-row,color);
if (d>=0)
{
row--;
d-=four_a_square*(row);
}
d+=two_b_square*(3+(col<<1));
col++;
}
d=two_b_square*(col+1)*col+two_a_square*(row*(row-2)+1)+(1-two_a_square)*b_square;
while ((row) + 1)
{
putpixel(col+x,row+y,color);
putpixel(col+x,y-row,color);
putpixel(x-col,row+y,color);
putpixel(x-col,y-row,color);
if (d<=0)
{
col++;
d+=four_b_square*col;
}
row--;
d+=two_a_square*(3-(row <<1));
}
}