Урок Кодирование цвета. Графика в программировании - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Конспект открытого урока «Представление вещественных чисел в памяти... 1 107.02kb.
Компьютерная графика 2 Whirlwind (1951) 2 1 83.98kb.
Двоичное кодирование звука 1 42.15kb.
Кодирование информации 1 91.41kb.
План описания графика 1 21.47kb.
Задание Хроматические и ахроматические цвета. Основные и составные... 1 17.95kb.
Компьютерная графика Компью́терная гра́фика также маши́нная графика 1 72.31kb.
Программа Всероссийской политической партии "Партия Возрождения Села" 6 436.68kb.
Растровая и векторная графика. Вариант 1 1 23.6kb.
Двоичные числа; двоичное кодирование текста в памяти компьютера. 1 47.97kb.
Занятие: «Графика Брестчины 80-90 гг и начала XXI века» 1 202.82kb.
Понятия в информатике Бит 1 203.54kb.
Направления изучения представлений о справедливости 1 202.17kb.

Урок Кодирование цвета. Графика в программировании - страница №1/1

Урок 1. Кодирование цвета. Графика в программировании

Графические изображения, хранящиеся в аналоговой (непрерывной) форме на бумаге, фото- и кинопленке, могут быть преобразованы в цифровой компьютерный формат путем пространственной дискретизации. Это реализуется, например, путем сканирования, результатом которого является растровое изображение. Растровое изображение состоит из отдельных точек (пикселей — англ. рiхеl образовано от словосочетания элемент изображения), каждая из которых может иметь свой цвет.

Качество растрового изображения определяется его разрешением (количеством точек по вертикали и по горизонтали) и используемой палитрой цветов.

Само изображение можно представить себе как объемную фигуру – параллелепипед:




Таким образом, объем необходимой видеопамяти для хранеия изображения

V = длина*ширина*глубина цвета

Глубина цвета I определяет количество возможных цветов в изображении по формуле Хартли:

N=2i



Пример. Определить объем видеопамяти компьютера, который необходим для реализации графического режима монитора High Со1ог с разрешающей способностью 1024x768 точек и палитрой из 65536 цветов.

Глубина цвета составляет:

I =log 2 65 536 = 16 бит.

Количество точек изображения равно: 1024x768 = 786 432.

Поскольку 16 бит – это 2 байта, то есть на каждую точку растра приходится 2 байта, то общий объем видеопамяти должен быть:

16 * 1024*768 бит

Переведем это число в мегабайты:

(16 * 1024*768) / (1024*1024*8) = 1,5 Мбайт

Допустим, нам известен размер изображения и возможный объем видеопамяти. Тогда мы можем вычислить, сколько цветов может быть у каждой точки. Например, изображение размером 1024 Х 1024 пикселя, а объем видеопамяти равен 512 Кбайт.

Сначала определим глубину цвета:

I = (512*1024*8)/(1024*1024) = 4 (бита)

Количество же цветов равно

N = 2i = 24 = 16, то есть при таком размере изображения и таком объеме видеопамяти различных цветов будет всего 16.

Цветное растровое изображение на мониторе формируется в соответствии с цветовой моделью RGB. В наиболее сейчас распространенном режиме (True Color) интенсивность каждого цвета задается 8-битным двоичным кодом, то есть на каждую точку растра приходится 24 бита (3 байта). Часто для удобства цвет записывают не в двоичной (слишком длинно), а в шестнадцатеричной форме. Например, красный кодируется FF0000, а зеленый 00FF00.

FF – это десятичное число 255 (15*1 + 15*16). Таким образом, если кодировать цвета десятичными числами, то каждая составляющая цвета – красная, синяя или зеленая – может быть представлена десятичным числом от 0 до 255.

Теперь вам предстоит пройти тест и реализовать проект ЦВЕТА. На форме расположите объекты Text1, Text2, Text3, Label1, Label2, Label3 для ввода компонент цвета, а также командную кнопку, переименовав ее в ЦВЕТ.

Под кнопку запишите процедуру для задания цвета форме:

Private Sub Command1_Click()

red = Val(Text1)

green = Val(Text2)

blue = Val(Text3)

c = RGB(red, green, blue)

Form1.BackColor = c

End Sub


После того, как вы реализуете проект, вы должны будете подобрать и записать компоненты, для те цветов, которые вам будут указаны в тесте.Урок 2. Градиентные заливки

Градиент – это перетекание цвета из одного в другой. Сегодня мы должны реализовать проект Градиенты. Для этого на форме создаем 3 кнопки и объект Picture1. По нажатию каждой из кнопок мы получим разные градиентные заливки – радиальную, вертикальную и горизонтальную.

Для реализации радиальной заливки используем рисование концентрических окружностей с изменением насыщенности одного из компонентов цвета вместе с радиусом.

Picture1.Cls

Picture1.Scale (0, 0)-(255, 255)

Picture1.DrawWidth = 3

For R = 0 To 255

Red = 100

Green = 0

Blue = R


Picture1.Circle (127, 125), R, RGB(Red, Green, Blue)

Next R


Центр окружностей можно изменять – это изменит точку, от которой начинается градиент.

Под кнопку Горизонтальной заливки поместим процедуру заполнения объекта вертикальными линиями с разной насыщенностью одной компоненты:

Picture1.Cls

Picture1.Scale (0, 0)-(255, 255)

Picture1.DrawWidth = 3

For Y = 0 To 255

Red = 255

Green = 255

Blue = Y

Picture1.Line (0, Y)-(255, Y), RGB(Red, Green, Blue)

Next Y

Ну, а что писать под кнопку Вертикальный градиент – придумайте сами. Кроме этого вам будет предложена одна задача по теме «Кодирование графики»



Урок 3. Использование циклов. Циклы и графика.

1.Рисуем ряд кружочков по горизонтали по верхнему краю формы.

Каждый кружочек одинаков, меняются только координаты центра каждого круга. Таким образом, процедура под кнопку выглядит так:

Scale (0, 0)-(20, 20)

FillStyle = 0

FillColor = RGB(компоненты цвета по варианту)

DrawWidth = 3

x = 1

y = 1


For i = 1 To 19

Circle (x, y), 0.5, vbRed

x = x + 1

Next i


Допишите программу так, чтобы на форме появились ряды кружков по остальным сторонам формы

2.Случайные числа. Конфетти

В приведенной ниже программе используются:

Функция выработки случайного числа rnd – вырабатывает случайное число от 0 до 1, а, например, rnd*45 – от 0 до 45

Randomize – запуск датчика случайных чисел

RGB(r,g,b) – задание цвета при помощи насыщенности 3 основных цветов

Введите под вторую кнопку и выполните процедуру

Scale (0, 0)-(20, 20)

FillStyle = 0

Cls

Randomize



For i = 1 To 10

r = Rnd * 255

g = Rnd * 255

b = Rnd * 255

FillColor = RGB(r, g, b)

x = Rnd * 20

y = Rnd * 20

Circle (x, y), 0.5, vbRed

Next i

Измените ее так, чтобы кружочков было 100, а шкала – 100 Х 100, радиус кружочков сделайте 10 и не забудьте, что кружочки должны располагаться по всей форме.

3. Программа, рисующая градиентный треугольник на экране.

Использованная переменная - х - служит для определения горизонтальной координаты точки, от которой поводится линия к центру экрана.

Cls

Scale (0, 0)-(255, 460)



DrawWidth = 5

For x = 0 To 255

Line (x, 0)-(128, 230), RGB(x, 0, 100)

Next x


допишите программу так, чтобы появился еще один треугольник – теперь с основанием по низу формы и с другим переходом цвета.

Урок 4. Массивы. Задание массивов.

Массив – область памяти, имеющая имя и позволяющая записать под это имя много чисел (или тестов). Все элементы массива при обработке отличаются друг от друга не именами, а номерами (индексами).

Массивы могут быть одномерными (у каждого числа – один номер) – они еще называются линейными, двумерные – прямоугольные массивы (матрицы) и многомерные.

Значения элементов массивов могут быть заданы как с клавиатуры, так и непосредственным чтением данных из файла или случайными числами или из сформированного заранее списка.

Случайные числа вырабатываются посредством функции RND. Эта функция задает числа из диапазона от 0 до 1. Если нужно расширить диапазон, то функция домножается на ширину диапазона, если его надо сдвинуть – прибавляется число, обозначающее левую границу диапазона. Например:

A(i) = int(rnd*100-10) – будет выработано целое число из диапазона от –10 до 90.

Для того, чтобы задать значения всему массиву мы должны выработать эти значения для каждого элемента от первого до последнего при помощи команды For.

Рассмотрим пример программы, работающей с массивом.

Задать массив размерностью 20 целыми случайными числами из диапазона от -10 до 10. В массиве найти сумму положительных чисел.

Форма для этой задачи должна иметь следующий вид:


данные будем выводить в СПИСОК – listbox. - .

В объект General поместим описание массива:

Dim a(20) as integer, b(10) as integer, c(10) as integer



Под кнопку «Ввод данных случайными числами» поместим процедуру ввода данных в массив:

List1.clear – очистка списка

Randomize – задание начала датчика случайных чисел.

For I=1 to 20

A(i)=int(rnd*20-10)

List1.additem ( A(i))

Next I

Здесь стоит прокомментировать команду List1.additem ( A(i)). Она обозначает, что очередное значение элемента массива будет добавлено в список.



Второй способ задания массива – ввести его данные с клавиатуры. Эту процедуру поместим под кнопку Ввод массива с клавиатуры:

List2.clear

For I=1 to 10

B(i)=val(inputbox(“Введи очередное число”))

List2.additem ( B(i))

Next I


И третий – на сегодня для вас последний способ – ввести данные в массив из других массивов. Например, каждый элемент массива С должен быть равен сумме соответствующих чисел из массивов А и В, итак, по кнопку «Формирование массива из других массивов»

List3.clear – очистка списка

For I=1 to 10

C(i)=A(i)+B(i)

List2.additem ( C(i))

Next I


Урок 5. Простейшие задачи на обработку массива

На форме расположим один список для помещения туда значений массива из 15 чисел. Расположим кнопку Заполнение и под нее впишем процедуру задания массива случайными числами в пределах от -10 до 10.



ВНИМАНИЕ!!! Не забудьте в General определить массив А, состоящий из 15 целых чисел.

Поставим еще 3 кнопки – Сумма отрицательных чисел, Среднее положительное число. Рассмотрим решение первых двух задач:

Под кнопку «Сумма отрицательных» напишем:

s = 0


For i = 1 To 15

If a(i) < 0 Then

s = s + a(i)

End if


Next i

Msgbox “сумма отрицательных чисел массива=”+str(s)


Рассмотрим еще один пример – найти количество положительных чисел в массиве – будет отличаться только тем, что под кнопкой «Количество положительных чисел» будет записано:

k= 0


For i = 1 To 15

If a(i) > 0 Then

k = k + 1

End if


Next i

Msgbox “Количество положительных чисел массива=”+str(s)

Здесь мы добавляем к результату по 1 , если очередное число удовлетворяет условию.
Под третью кнопку процедуру разработайте и впишите сами.
Урок 6. Поиск максимума и минимума в массиве.

Существует несколько алгоритмов поиска максимального и минимального числа в массиве. Рассмотрим наиболее распространенный из них. Его можно назвать «Алгоритм поиска самого большого яблока в корзине». Суть его весьма проста. Мы берем первое попавшееся яблоко из корзины и говорим, что оно пока – самое большое. Затем, по очереди доставая из корзины яблоки, мы должны каждое из них сравнивать с самым большим на данный момент. Если очередное яблоко оказывается больше, то его мы объявляем самым большим на данный момент. Так продолжаем до тех пор, пока яблоки не закончатся. После этого у нас в руках – самое большое яблоко. Если все то же самое записать на языке бейсик, мы получим процедуру

Max = a(1)

For I=2 to 10

If a(i)>max then

Max=a(i)


End if

Next I


Msgbox “Самое большое число=”+str(s)
Достаточно часто требуется найти не сам максимум, а номер (индекс) под которым это число располагается. Процедура поиска изменяется минимально:
Max = a(1)

Imax = 1


For I=2 to 10

If a(i)>max then

Max=a(i)

End if


Next I

Msgbox “Номер самого большого числа=”+str(s)


А теперь задание на урок: создайте на форме список и 4 кнопки – ввод данных, максимальное число, номер минимального, Разность максимального и минимального. Массив из 10 чисел задайте датчиком случайных чисел. Реализуйте все три задания.

Урок 7.Упорядочение массива


Существует большое количество алгоритмов упорядочения массивов. Один из самых простых – это упорядочение простыми перестановками. Идея его такова. Проходим массив от начала до конца и на каждом шагу повторяем действия: сравнить очередное число с тем, что стоит под начальным номером; если оно меньше того, что стоит под начальным номером, то обменять их местами. Эти действия необходимо повторять для каждого номера от первого до предпоследнего. Таким образом, надо применять вложенные циклы.

Вот форма для реализации задачи об упорядочении по возрастанию целочисленного массива из 10 элементов, заданного случайными числами из диапазона –3,7


Под кнопку Ввод данных процедура достаточно традиционная, поэтому здесь не приводится. А вот под кнопку Упорядочение надо написать такую процедуру:

List2.Clear

For n = 1 To 9

For i = n To 10

If a(i) < a(n) Then

k = a(i)


a(i) = a(n)

a(n) = k


End If

Next i


Next n

For i = 1 To 10

List2.AddItem (a(i))

Next i


Под кнопку Далее напишите процедуру упорядочения массива по убыванию.

Урок 8. Связанные массивы
Связанными называются массивы, данные которых связаны одним смыслом. Например – Массив фамилий и доходов, Имен и роста, класса и успеваемости и так далее. Рассмотрим пример работы со связанными массивами. Данные в массивы будем задавать с клавиатуры.

Известны фамилии и доходы группы из 12 человек. Составить список тех, кто имеет доходы выше среднего.


Форма для этого проекта должна выглядеть так:

Предварительно заполним списки данными. Для этого, при создании проекта мы располагаем список LIST1 и находим его свойство LIST – то есть список. Щелкаем в него мышкой, открываем список и начинаем писать в него фамилии, заканчивая их нажатием клавиш

CTRL и ENTER. По окончании списка нажмите просто ENTER.

Потом так же точно заполните второй список соответствующим доходами.

В General определим массивы:

DIM A(12) as integer, F(12) as string

Процедура ввода данных в массивы будет выглядеть так:

Private Sub Command1_Click()

For i = 1 To 12

f(i) = List1.list(i-1)

a(i) = List2.list(i-1)

Next i

End Sub


Дело в том, что в списках нумерация ведется с 0, а в массиве мы хотим нумеровать с 1.

А вот задача определения тех, кто заработал выше среднего распадается на две подзадачи:



  • определить средний доход

  • выявить и переписать в третий список тех, чей доход выше среднего

Процедура для решения этих подзадач написана ниже. Именно эту процедуру мы пишем под кнопку РЕШЕНИЕ.

Private Sub Command2_Click()

List3.Clear

s = 0


For i = 1 To 12

s = s + a(i)

Next i

sr = s / 12



For i = 1 To 12

If a(i) > sr Then List3.AddItem (a(i))



Next i

End Sub


В третьей кнопке – попробуйте найти фамилию человека, заработавшего больше всех.
Урок 9 – самостоятельная работа.




Фанатизм во имя порядка готов внести анархию. Василий Ключевский
ещё >>