Как создавать растровые рисунки: Как перевести векторное изображение в растровое

Содержание

Презентация по информатике на тему «Растровая графика. Создание изображений в растровом графическом редакторе.»

Инфоурок › Информатика ›Презентации›Презентация по информатике на тему «Растровая графика. Создание изображений в растровом графическом редакторе.»

Скрыть

Описание презентации по отдельным слайдам:

1 слайд Описание слайда:

«Растровая графика. Создание изображений в растровом графическом редакторе.»

2 слайд Описание слайда:

Определение 1 Компьютерная графика – это раздел информатики, занимающийся проблемами «рисования» на ЭВМ.

Чтобы изображение можно было хранить, просматривать и обрабатывать на компьютере, оно должно быть представлено в цифровом виде. Все компьютерные изображения делятся на два вида: Растровые Векторные

3 слайд Описание слайда:

Растровое изображение составляется из мельчайших точек (пикселей) – цветных квадратиков одинакового размера. Растровое изображение подобно мозаике - когда приближаете (увеличиваете) его, то видите отдельные пиксели, а если удаляете (уменьшаете), пиксели сливаются. Чем больше количество квадратиков, чем меньше их размеры – тем лучше выглядит результат. В качестве примеров растровых графредакторов можно назвать программы Paint и Photoshop.

4 слайд Описание слайда:
5 слайд
Описание слайда:

Получить растровое изображение можно одним из способов: В процессе сканирования; При использовании цифрового фотоаппарата; Созданием в среде графического редактора. Компьютер хранит параметры каждой точки изображения (её цвет, координаты). Причём каждая точка представляется определенным количеством бит (в зависимости от глубины цвета). Глубина цвета - сколько битов отведено на хранение цвета каждой точки: - в черно-белом - 1 бит - в полутоновом - 8 бит - в цветном - 24 (32) бита на каждую точку. Растровые файлы имеют сравнительно большой размер, т.к. компьютер хранит параметры всех точек изображения.

6 слайд Описание слайда:

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

7 слайд
Описание слайда:

Растровое изображение нельзя расчленить. Оно «литое», состоит из массива точек. Поэтому в программах для обработки растровой графики предусмотрен ряд инструментов для выделения элементов «вручную». Оригинал Увеличенный фрагмент

8 слайд Описание слайда:

Графические редакторы позволяют открывать, обрабатывать и сохранять изображения и рисунки в различных графических форматах. Форматы графических файлов определяют способ хранения информации в файле (растровый или векторный), а также форму хранения информации (используемый метод сжатия). Растровые графические форматы: ВМР JPEG TIFF PNG GIF

9 слайд
Описание слайда:

Наиболее известные растровые редакторы: Adobe Photoshop Adobe Fireworks Corel Photo – Paint Corel Paint Shop Pro Corel Painter GIMP Microsoft Paint Tux Paint и т. д.

10 слайд Описание слайда:

Задание №1 (выполнение работы не компьютере). Нарисуйте акулу, показанную на рисунке в растровом графическом редакторе Paint. Для запуска программы Paint: нажать Пуск программы стандартные Paint. Для выбора крупного масштаба: Вид, масштаб, другой, 800% Вид, масштаб, показать сетку

11 слайд Описание слайда:

Задание на дом: учить записи в тетрадях

Курс повышения квалификации

Курс профессиональной переподготовки

Учитель информатики

Курс профессиональной переподготовки

Учитель математики и информатики

Найдите материал к любому уроку,
указав свой предмет (категорию), класс, учебник и тему:

Выберите категорию: Все категорииАлгебраАнглийский языкАстрономияБиологияВнеурочная деятельностьВсеобщая историяГеографияГеометрияДиректору, завучуДоп. образованиеДошкольное образованиеЕстествознаниеИЗО, МХКИностранные языкиИнформатикаИстория РоссииКлассному руководителюКоррекционное обучениеЛитератураЛитературное чтениеЛогопедия, ДефектологияМатематикаМузыкаНачальные классыНемецкий языкОБЖОбществознаниеОкружающий мирПриродоведениеРелигиоведениеРодная литератураРодной языкРусский языкСоциальному педагогуТехнологияУкраинский языкФизикаФизическая культураФилософияФранцузский языкХимияЧерчениеШкольному психологуЭкологияДругое

Выберите класс: Все классыДошкольники1 класс2 класс3 класс4 класс5 класс6 класс7 класс8 класс9 класс10 класс11 класс

Выберите учебник: Все учебники

Выберите тему: Все темы

также Вы можете выбрать тип материала:

Общая информация

Номер материала: ДВ-147018

Похожие материалы

Вам будут интересны эти курсы:

Оставьте свой комментарий

Сайт Иванской Светланы Алексеевны - Л-15 Растровый способ формирования графических образов (1)

Содержание

Растровая и векторная графика

При всем величии методов формирования изображений на компьютере существует лишь два вида графики: растровая и векторная.

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

Практически все растровые изображения формируются на основе информации, поступающей из трех источников: устройств ввода видеосигнала (сканеры, видеокамеры или цифровые камеры), рисовальных программ и графических редакторов (таких, как Photoshop) и программ для создания снимков экрана (таких, как Exposure Pro, System и др.). Изображения, созданные с помощью одного из таких средств, относятся к растровой графике.

Векторная графика. По сравнению с растровой, векторная, или, как ее еще называют, объектно-ориентированная, графика и сложнее, и проще одновременно. Например, вместо того, чтобы формировать прямоугольник из тысяч или миллионов пикселов, векторная программа обходится одной фразой, которая в переложении на понятный язык будет выглядеть примерно так: "Начертить прямоугольник такого-то размера и поместить его туда-то". Подобный способ описания изображений гораздо эффективнее и экономнее. В то же время векторное изображение может включать множество разнотипных объектов – линий, прямоугольников, кругов, кривых, многоугольников и текстовых блоков, – и каждый из них имеет собственный набор атрибутов, таких как толщина линии, цвет заливки, цвета градиентов, особенности форматирования текста и т. д.

Разницу между тем, как описывают изображения программы объектно-ориентированной и растровой графики, поможет понять следующая аналогия. На вопрос, как пройти к такому-то месту, первая ответит: "Пройдите три квартала, у дома №7 сверните налево и пройдите еще пять кварталов". А программа растровой графики ответит так: "Сделайте шаг, потом еще один, потом еще.

..". Работая в Photoshop 6, мы имеем дело с растровыми изображениями (хотя можно создавать и векторную графику, а также пользоваться методами векторной графики при создании выделений и масок).

Как правило, векторная графика создается программами двух категорий: иллюстрационными (FreeHand, Canvas, Illustrator и др.) и программами автоматизированного проектирования. С векторной графикой работают также программы построения диаграмм и некоторые другие.

Растровые изображения как объекты. Граница между растровой и векторной графикой иногда принимает несколько размытые очертания. Так, векторная графика может включать растровые изображения как самостоятельные объекты. Скажем, в иллюстрацию, созданную в Adobe Illustrator, можно поместить сканированное изображение. Оно будет вести себя как объект – прямоугольник или овал. Его можно поворачивать и масштабировать, но пикселы изображения уже недоступны для редактирования.

Заметьте, что файл векторной графики может включать растровое изображение как единственный объект. В этом случае файл является растровым изображением, которое можно открывать и редактировать в рисовальной программе или графическом редакторе. Файлы Photoshop в формате EPS (Encaplulated PostScript) – хороший тому пример. Обычно этот формат используется для векторной графики, но в Photoshop можно создавать растровые EPS-изображения.

Векторы в растровой графике. Oтметим, что Photoshop допускает включение в растровые изображения векторных объектов, таких как обтравочные контуры или текст. Обтравочный контур невидим и выполняет роль острого ножа, которым вырезают силуэты. Этот эффект часто встречается в рекламе, где предметы парят на фоне облаков

Растровые изображения

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

Растровое изображение характеризуют три основных признака: размер, глубина пикселов и цветовая модель (которая в Photoshop называется цветовым режимом изображения).

Размер

Растровые изображения представляют собой большую сетку с маленькими квадратными ячейками (см. рис. 15.1), наподобие шахматной доски или кафельной стены в ванной. Размер изображения определяется количеством пикселов по его ширине и высоте. Шахматная доска имеет восемь клеток в ширину и восемь в высоту. Размер сетки компьютерного экрана могут составлять 640 на 480 пикселов.

   

Рис. 15.1. Растровое изображение как сетка из квадратиков

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

Следует отметить, что размер растрового изображения не имеет ничего общего с физическим размером изображения в дюймах или сантиметрах. Растровые изображения в их исходной цифровой форме не имеют физического размера – это просто массив данных. Они существуют, как платонический идеал, ожидающий своего воплощения в физической форме. Как бы вы ни увеличивали и ни уменьшали цифровое изображение, количество его пикселов остается неизменным.

На печати цифровое изображение получается в виде оттиска заданного размера. Отношение между этим размером и количеством пикселов изображения называется его разрешением. Очень важно понимать, что разрешение не является врожденным свойством цифрового изображения – величина эта относительная и изменяется она в зависимости от физического размера изображения, в котором вы его воспроизводите. Далее в этой лекции разрешение будет рассмотрено более подробно.

Создание и редактирование растровых изображение

Понятие программы и её структура.

ТИП УРОКА: объяснение нового материала.

ХОД УРОКА.

1. Организационный момент.

2. Актуализация опорных знаний.

3. Новый материал

В языках программирования широко используются понятия: выражение, оператор, синтаксис и семантика языка.

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

Программа на Паскале состоит из отдельных строк. Их набор, проверка осуществляется с помощью текстового редактора. В один ряд могут расположиться несколько команд или операторов, они записываются, отделяясь друг от друга ;, однако следует располагать только один оператор в одну, это облегчает как исправление так и чтение.

Первая строка любой программы начинается со слова PROGRAM, затем идет название программы.

Затем располагается раздел описания переменных и постоянных.

В основной части программы располагаются выполняемые команды, действия. Она начинается с ключевого слова BEGIN, запись всех выполняемых операторов (команд) заканчивается ключевым словом END.

Ввод начальных данных осуществляется с клавиатуры.

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

Набрать и запустить программу вычисляющую длину окружности L с радиусом R.

end.

Задача: Составить алгоритм и программу для вычисления площади круга с радиусом R.

Урок № 14 Информатика

Дата: 11.12.2018 г

Класс: 5 «В», «Г»

Количество присутствующих: 

отсутствующих:

ФИО учителя: Унгарова В. К.

Тема урока:

Раздел 2: Информация и ее обработка.

Тема: Создание и редактирование растровых изображений. СОР

Ознакомительный урок

Цель обучения по предмету

Учащиеся могут:

5.2.1.1– перечислять и представлять информацию в разных формах;

5.2.2.2 – создавать и редактировать растровые изображения.

Результаты обучения

Все учащиеся будут знать типы графических изображений: растровые и векторные, возможности графического редактора Paint

Большинство учащихся будут уметь перечислять и представлять информацию в разных формах; создавать и редактировать растровые изображения.

Некоторые учащиеся будут знать принципы создания рисунка из графических примитивов в графическом редакторе Paint, смогут создавать творческие растровые изображения

Предметная лексикология

Графический редактор, растровые изображения, векторные изображения – графикалық редактор, растрлық кескін – graphics editor, raster images

Ход урока

Этапы деятельности

Этапы урока

Рекомендуемые виды деятельности на уроке

Вызов

  1. Орг. момент

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

Для создания психологической атмосферы проводит игру «Ты – мне, я – тебе».

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

На партах лежат три жетона – красный, синий, желтый. Каждый из учащихся поднимает подходящий ему жетон:

  • Красный – хорошее;

  • Синий – спокойное;

  • Желтый – плохое.

(Подведите итог: какой цвет преобладает больше у учащихся.)

Демонстрация видеоролика «Страх на пути к успеху»

  1. Актуализация знаний

(И) Прием «Горячий стул». Проведите опрос теоретического материала домашней работы, используя вопросы учебника.

1. Что вы понимаете под программным обеспечением компьютера?

2. На какие три группы делится программное обеспечение?

3. Может ли компьютер работать без программного обеспечения?

4. Для чего нужна операционная система?

5. Как называется операционная система, установленная на ваших компьютерах?

6. Что такое пользовательский интерфейс?

(К,Ф) Метод «Мозговой штурм».

I уровень – что ты знаешь о программе Paint?

II уровень – для чего ты применяешь программу Paint?

III уровень – какие действия можно применить к графическим изображениям в программе Paint?

Осмысление

  1. Изучение нового материала

(О) Познакомьте учащихся с типами графических изображений – растровые и векторные.

(П,И) Предложите учащимся заполнить названия элементов окна графического редактора Paint.

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

(Д) Обратите внимание учащихся на:

- возможность масштабировать изображение, устанавливать или удалять линейки и сетку в Рабочей области;

- изменение размера Рабочей области с помощью диалогового окна Свойства изображения.

(И) Дайте учащимся задание создать графическое изображение дерева.

(О,Д) Объясните и продемонстрируйте учащимся операции с фрагментом рисунка, различные способы их выполнения:

  • копирование;

  • перемещение;

  • изменение размера;

  • удаление фрагмента рисунка;

  • изменение масштаба рисунка;

  • наклон, отражение, поворот рисунка

  1. Закрепление изученного материала.

(Игра «Тематическая физкультминутка».

  1. Присесть, если учитель называет инструмент, которым можно воспользоваться в программе Paint (например, карандаш, заливка, ластик, текст, масштаб, палитра).

  2. Потянуться вверх, если учитель называет инструмент, которым нельзя воспользоваться в программе Paint (лассо, штамп, волшебный ластик, рука).

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

  4. Повернуть туловище вправо, если учитель называет инструмент, у которого не имеются атрибуты (заливка, палитра, масштаб).

Игра «Крестики – нолики». Учащиеся делятся на две команды: «Крестики» - 1 вариант, «Нолики» - 2 вариант. Учащиеся по цепочке отвечают на вопросы учителя, предварительно назвав, клетку, в которую будет размещен «крестик» или «нолик». За неправильный ответ в клетку помещается фигура команды соперников. Вопросы задаются, чтобы ответ был «Да», или «Нет», в виде термина

  1. Практическая работа

(И) Предложите учащимся выполнить практическую работу за компьютером по выбранным уровням.

Подготовьте разноуровневые задания для практической работы. Например:

1 – й уровень. Нарисуйте светофор. Все кружки должны быть круглыми, одинакового размера, раскрасьте рисунок. Установите рядом со светофором щит с текстом: «Переходите дорогу только на зеленый свет». Примените собственное цветовое оформление текста и фона.

2 – й уровень. С помощью инструмента Эллипс (режим заполнения основным цветом) нарисуйте букашку. С помощью инструмента Криваяизобразите несколько растений. Для их закраски воспользуйтесь инструментом Заливка.

3 – й уровень. Нарисовать с помощью инструментов создания объектов: собаку, состоящую из одних прямоугольников; лицо чернокожего человека, состоящее из одних окружностей; звездочку с помощью инструментаМногоугольник. Сохраните документ в папке «Мои рисунки»

  1. Подведение итогов.

(Ф) Взаимооценивание групп по предложенным критериям.

(С) Выставление оценок учителем

  1. Домашнее задание.

  1. Задание из уровня «Применение» (учебник, с.49).

  2. Творческое задание: создание ребусов по понятиям из темы урока

Рефлексия

Рефлексия по уроку (интерес, правильность, понимание темы, активность)

Учащимся дается индивидуальная карточка, в которой нужно подчеркнуть фразы, характеризующие работу ученика на уроке по трем направлениям:

Game Graphics Учимся использовать растровые изображения | Часть II

Растровые изображения - это ядро ​​и суть каждой игры, будь то аркадная 2D-игра с вертикальной прокруткой, такая как классическая Heavy Barrel , симулятор войны, например Battlefield 1942 , шутер от первого лица, например Doom III , или стратегическая игра в реальном времени, такая как Warcraft III: Reign of Chaos . Ни одна из этих игр ничего не значила бы без возможности загружать, манипулировать и отображать растровые изображения в той или иной форме.Поэтому, когда вы научитесь использовать растровые изображения, вы действительно поймете, что нужно для создания игры.

В этой главе очень подробно рассматривается обработка растровых изображений, показано, как загружать, создавать и отображать файлы растровых изображений Windows (с расширением .bmp). Команды в этой главе также покажут вам, как управлять растровыми изображениями для создания специальных эффектов. Эта глава будет полезным введением в более сложную тему спрайтов, которая рассматривается в главе 11 «Искусство использования анимированных спрайтов в 2D-играх».«

Введение в растровые изображения

Фраза файлы растровой графики , в прямом смысле слова, относится к любому формату файла, используемому для хранения изображений, например, сделанных цифровыми камерами или сканерами, загруженных из Интернета или даже нарисованных от руки. Термин bitmap относится к способу кодирования битов изображения в файле изображения или в памяти перед отображением.

Подсказка

Напомним, что 8 бит равны 1 байту, а 32-битной видеокарте требуется 4 байта на каждый пиксель.

Битовый формат экрана дисплея (вашего монитора) не всегда совпадает с битовым форматом изображения в памяти или в файле на диске, но Windows и DirectX (который поддерживает DarkBASIC) могут справиться с этой задачей преобразования изображений с диска в формат, поддерживаемый вашей видеокартой.

Растровые изображения варьируются от простых букв до сложных изображений и всего, что между ними. Ранние игровые консоли, такие как Nintendo и Sega, полагались почти исключительно на маленькие растровые изображения для графики в видеоиграх.(Напротив, большинство современных игр работают в 3D и используют полигоны с текстурами, которые тоже являются растровыми изображениями. )

Что такое растровое изображение?

Так что же такое растровое изображение? Это могло бы помочь, если бы вы сначала имели представление о том, для чего полезны растровые изображения, но я скоро вернусь к этому. Растровое изображение - это не что иное, как набор байтов (где каждый байт равен 8 битам), представляющих картинку или графическое изображение. Самая простая форма растрового изображения - это черно-белое изображение. Все белые пиксели представлены как 0, а все черные пиксели представлены как 1.На рисунке 10.1 показано простое растровое изображение 88 с использованием единиц и нулей.


Рисунок 10.1: Простое монохромное растровое изображение, показывающее, как строится очень простое изображение

Обратите внимание, как вы можете визуализировать изображение, состоящее из единиц и нулей. По мере того, как вы смотрите на них ближе, на пикселях появляется узор. (Если вы не знаете, что такое пиксель, вернитесь к главе 9 для объяснения.) Каждая 1 или 0 представляет цветной пиксель (черный или белый соответственно). Проявив немного больше воображения, вы можете улучшить это теоретическое растровое изображение дополнительными цветами, используя другие числа, такие как 2, 3 и 4, для обозначения красного, зеленого и синего цветов.Фактически, фактическое битовое кодирование растрового изображения чрезвычайно сложно; он включает в себя разную глубину цвета (например, 16-битный или 32-битный цвет), что я не буду вдаваться в подробности.

Форматы файлов растровых изображений

Существует множество различных форматов файлов растровых изображений, но все они основаны на простом формате, показанном на рисунке 10.1. DarkBASIC обрабатывает все детали преобразования формата растрового изображения, чтобы он отображался на экране должным образом. Если вы можете представить себе трудности, связанные с преобразованием 8-битного изображения в 32-битное изображение, вы разовьете значительное уважение к объему работы, которую DarkBASIC и DirectX выполняют автоматически.DarkBASIC изначально использует формат файлов BMP ( Windows Bitmap ). Хотя существуют и другие популярные форматы, такие как TIF ( Tagged Image File Format ), JPEG ( Joint Photographic Experts Group ), GIF ( Graphical Interchange Format ) и PCX ( Picture Exchange ), это проще просто используйте формат, изначально поддерживаемый DarkBASIC и DirectX.

Глубина цвета - самый важный фактор, который следует учитывать при работе с растровыми изображениями. Наиболее распространенная глубина цвета - 8, 16, 24 и 32 бита.Количество цветов в изображении часто называют битовой глубиной , потому что это количество представляет биты, а не количество цветов. Чтобы выяснить, сколько цветов поддерживается глубиной цвета (также называемой бит на пиксель или BPP ), используйте следующую формулу:

Всего цветов = 2 ∧ (битовая глубина)

Эта формула принимает 2 в степени глубины цвета изображения (или отображения видео). В таблице 10.1 показаны общие битовые глубины, а также общее количество цветов, связанных с каждым из них.

Таблица 10.1: Глубина цвета растрового изображения

Битовая глубина

Количество цветов

8

256

12

4 096

16

65 536

24

16 777 216

32

4 294 967 296

Вы заметите, что количество цветов увеличивается с увеличением глубины цвета.Это потому, что у компьютера больше битов для представления цветов. На рисунке 10.1 у вас было 2 бита - черный и белый. В 16-битном изображении вы можете выбрать в общей сложности 65 535 комбинаций. Не беспокойтесь о деталях, потому что DarkBASIC позаботится о них за вас.

Создание растровых изображений

В этот момент вам может быть интересно узнать, как загрузить растровое изображение с диска и нарисовать его на экране. Я скоро покажу вам, как это сделать. Во-первых, я хочу объяснить кое-что важное, прежде чем вы начнете использовать растровые изображения в DarkBASIC.

Как создать растровое изображение? Я думаю, это было бы хорошим началом, особенно если вы не знакомы с программами рисования. Есть два способа создать растровое изображение. Во-первых, вы можете использовать некоторые встроенные команды DarkBASIC, такие как те, что описаны в главе 9. В качестве альтернативы вы можете использовать программу рисования, такую ​​как Paint Shop Pro, для создания интересной графики, а затем загрузить их в свою программу DarkBASIC. Чтобы создать растровое изображение, которое будет загружено DarkBASIC, вам понадобится программа графического редактора.Мой любимый графический редактор - Paint Shop Pro от Jasc Software (http://www.jasc.com). Пробная версия Paint Shop Pro находится на компакт-диске (см. Рисунок 10.2), и вы можете установить ее из меню компакт-диска.


Рисунок 10.2: Paint Shop Pro - мощный графический редактор.

Эта программа содержит все инструменты, необходимые для создания файла растрового изображения для использования в DarkBASIC. Существует множество инструментов для редактирования изображений и функция масштабирования, которая полезна для точного редактирования графики.Редактирование и обработка игровой графики - серьезная тема, а также серьезный выбор карьеры для многих, кто находит работу в полиграфической, рекламной и игровой индустрии. Однако полное освещение этой темы выходит за рамки данной книги. Я рекомендую вам взять книгу или две по этой теме, например, Paint Shop Pro 7 Fast & Easy (Premier Press, 2000). Даже если вас интересует исключительно 3D-графика, вы должны знать, как создавать 2D-графику, потому что 3D-текстуры создаются с помощью таких программ, как Paint Shop Pro.Для получения дополнительной информации перейдите к главе 17 «Основы программирования 3D-графики».

Использование растровых изображений

Итак, какие виды использования есть у растровых изображений? С ними можно делать много разных вещей. Вы можете создать красивый фон или использовать растровые изображения меньшего размера для отображения линий счета и статистики. Вместо того, чтобы рисовать изображения попиксельно или построчно, вы можете использовать растровые изображения для штамповки всего изображения на экране.

За годы программирования я нашел довольно много применений для растровых изображений.Я использовал их для создания шрифтов (для текста на экране) и текстур (для скинов моделей) и даже для отображения высоты. Поскольку растровое изображение - это не более чем серия байтов, вы можете использовать его для чего угодно. (Почему мы не называем их байтовыми картами, я не знаю.)

Создание и загрузка растровых изображений

Сначала я расскажу о серии команд для загрузки и создания растровых изображений. Эти команды полезны для загрузки изображения, созданного в Microsoft Paint, или для создания собственных изображений в DarkBASIC.

DarkBASIC может поддерживать до 32 растровых изображений одновременно. Это может показаться небольшим числом, но вы можете проявить изобретательность и устранить любые проблемы, связанные с небольшим количеством растровых изображений. Обычно вы не будете использовать более пяти или шести растровых изображений одновременно, потому что большая часть работы в 2D-игре выполняется спрайтами, которые хранятся отдельно от растровых изображений (как вы увидите в главе 11, «Искусство использования анимированных спрайтов в 2D-играх »).

Каждая битовая карта адресуется как массив.Другими словами, к каждому растровому изображению прикреплен номер в диапазоне от 0 до 31. Битовый массив 0 является особенным в том смысле, что он отображается на экране по умолчанию. Следовательно, если вы загрузите графику в растровое изображение 0, оно будет отображаться на экране.

Примечание

Bitmap 0 - это важный битовый массив. Он зарезервирован для экрана. Все, что загружено, нарисовано или вставлено в это растровое изображение, появится прямо на экране.

Загрузка файла растрового изображения

ЗАГРУЗИТЬ BITMAP - это первая из важных команд битовой карты.Формат команды: LOAD BITMAP Filename, Bitmap Number . Первый параметр - это имя загружаемого файла; второй - номер растрового изображения (от 0 до 31), в которое загружается изображение. В DarkBASIC нет битовых переменных; вместо этого есть встроенный массив растровых изображений, который вы можете использовать. В других языках, таких как C ++, Visual Basic и Delphi, вам нужно будет создать переменную, а затем загрузить растровое изображение в память, после чего вы сможете рисовать его на экране.Однако в DarkBASIC вы можете просто загрузить растровое изображение в массив растровых изображений.

Можно одновременно загрузить растровое изображение и отобразить его на экране. DarkBASIC определяет растровое изображение 0 как экран, поэтому, если вы передадите значение 0 для LOAD BITMAP, он загрузит файл прямо на экран. Обратите внимание, что файл растрового изображения, который вы хотите загрузить, должен находиться в том же каталоге, в котором находится программа, иначе DarkBASIC вернет сообщение об ошибке, что не может найти файл.

Создание нового растрового изображения в памяти

CREATE BITMAP - вторая из важных команд растровых изображений.В то время как LOAD BITMAP загружает растровое изображение с диска и отображает его на экране, CREATE BITMAP создает пустое растровое изображение с любыми размерами, которые вы хотите. Это команда, которую вы использовали бы для создания растровых изображений, на которых можно рисовать в DarkBASIC. Синтаксис этой команды: CREATE BITMAP Bitmap Number , Width , Height .

В отличие от команды ЗАГРУЗИТЬ BITMAP, которая имеет параметр Bitmap Number , когда вы вызываете команду CREATE BITMAP, все операции рисования (такие как LINE или CIRCLE) по умолчанию выполняются на этом новом растровом изображении.Следовательно, если вы создаете новое растровое изображение, а затем выполняете некоторые команды рисования, эти операции перейдут не на экран, а на новое растровое изображение! Помните об этой ситуации; Когда что-то не отображается на экране, как вы ожидали, вы можете убедиться, что вы сначала вызвали SET CURRENT BITMAP 0, чтобы установить текущий вывод на экран.

CREATE BITMAP требует для работы трех параметров (ни один из них не является необязательным). Первый параметр - это номер растрового изображения, которое вы хотите создать.Этот параметр принимает любое число от 1 до 31. Вы не можете использовать 0 в этом параметре, потому что 0 - это экран. Технически вы можете загружать только 31 растровое изображение за раз в DarkBASIC, хотя экран также действует как растровое изображение. Кроме того, вы не можете использовать номер растрового изображения, который уже использовался (через CREATE BITMAP или LOAD BITMAP) без предварительного удаления растрового изображения.

Второй и третий параметры - это ширина и высота растрового изображения. Они не обязательно должны соответствовать ширине и высоте экрана.Вы можете сделать растровое изображение размером 100–100 пикселей, или вы можете сделать его 1600–1200 пикселей, хотя я не могу представить, зачем вам может понадобиться такой большой!

Программа CreateBitmap создает растровое изображение и отображает на нем круги. На рисунке 10.3 показаны результаты программы CreateBitmap. Эта программа находится на компакт-диске в папке SourcesDarkBASICCh20CreateBitmap. (Версия DarkBASIC Pro находится в SourcesDBProCh20CreateBitmap.)


Рисунок 10.3: Программа CreateBitmap показывает, как создавать и рисовать на растровом изображении в памяти.

'----------------------------------
'Руководство для начинающих по программированию игр с помощью DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа CreateBitmap
'----------------------------------
СКРЫТЬ МЫШЬ

'создать новое растровое изображение
ПЕЧАТЬ "Создание растрового изображения ..."
СОЗДАТЬ BITMAP 1, 640, 480

'отображать сообщение на экране
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
ПЕЧАТЬ "Рисование кругов ..."

'нарисуйте круги на поверхности растрового изображения
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 1
ДЛЯ N = 1 ДО 100
 ЧЕРНИЛА RGB (RND (255), RND (255), RND (255)), 0
 КРУГ RND (640), RND (480), RND (100)
СЛЕДУЮЩИЙ N

УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
ПЕЧАТЬ "Нажмите клавишу, чтобы отобразить растровое изображение. .. "
ПОДОЖДИТЕ КЛЮЧ

'копируем растровое изображение 1 на экран
КОПИРОВАТЬ BITMAP 1, 0

ПОДОЖДИТЕ КЛЮЧ
КОНЕЦ
 

Проверка состояния растрового изображения

Создание и загрузка растровых изображений может быть сложной задачей, особенно если вы не знаете, было ли оно создано или уже загружено. В этом вам может помочь команда BITMAP EXIST. Формат команды - BITMAP EXIST ( Bitmap Number ). Эта команда принимает один параметр - номер битовой карты - и сообщает вам, было ли это битовое изображение создано или загружено.Он возвращает 0, если растровое изображение не существует, и 1, если оно существует. Эти два числа являются стандартными для большинства языков, где true = 1 и false = 0. Лично мне легче запомнить, что false всегда равно нулю, чем пытаться запомнить оба.

Программа BitmapStatus демонстрирует эффекты команды BITMAP EXIST. На рисунке 10.4 показан результат работы этой программы. Обратите внимание, что битовая карта 0 (экран) всегда будет возвращать истину, потому что экран всегда существует. Эта программа находится на компакт-диске в папке SourcesDarkBASICCh20BitmapStatus.(Версия DarkBASIC Pro находится в SourcesDBProCh20BitmapStatus.)


Рисунок 10.4: Программа BitmapStatus демонстрирует использование команды BITMAP EXIST.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа BitmapStatus
'---------------------------------

'инициализировать некоторые переменные
N = 0
статус = 0
сообщение $ = ""

'создать статусные сообщения
DIM E $ (2)
E $ (0) = "не существует"
E $ (1) = "СУЩЕСТВУЕТ!"

'создать несколько растровых изображений (случайным образом)
СЛУЧАЙНЫЙ ТАЙМЕР
ДЛЯ N = 1 ДО 31
 ЕСЛИ RND (10) <5
 СОЗДАТЬ BITMAP N, 640, 480
 ENDIF
СЛЕДУЮЩИЙ N

'настроить экран
СКРЫТЬ МЫШЬ
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0

'отображать статус каждого растрового изображения
ДЛЯ N = от 0 до 15
 'проверить растровые изображения 0-15
 сообщение $ = E $ (BITMAP EXIST (N))
 'отображать статус
 ТЕКСТ 0, N * 20, "Bitmap" + STR $ (N) + message $

 'проверить растровые изображения 16-31
 сообщение $ = E $ (BITMAP EXIST (N + 16))
 'отображать статус
 ТЕКСТ 320, N * 20, "Bitmap" + STR $ (N + 16) + message $
СЛЕДУЮЩИЙ N

ПОДОЖДИТЕ КЛЮЧ
КОНЕЦ
 

Команды битовой информации

Теперь, когда вы знаете, как загружать и создавать растровые изображения, пора перейти к другим важным командам. Каждое растровое изображение имеет определенную информацию, и есть три вещи, которые есть у каждого растрового изображения: ширина, высота и глубина. Ширина и высота говорят сами за себя. Глубина - это глубина цвета растрового изображения. DarkBASIC предоставляет вам команды для поиска этих свойств.

Определение ширины и высоты

Команда BITMAP WIDTH возвращает ширину в пикселях указанного растрового изображения. Требуется один параметр - номер битовой карты. Синтаксис команды BITMAP WIDTH - BITMAP WIDTH ( номер битовой карты ).Программа BitmapInfo демонстрирует использование команды BITMAP WIDTH.

Команда BITMAP HEIGHT возвращает высоту в пикселях указанного растрового изображения. Он принимает один параметр, как и команда BITMAP WIDTH. По сути, это тот же параметр. Формат команды BITMAP HEIGHT - BITMAP HEIGHT ( Bitmap Number ). Программа Bitmap Info демонстрирует использование команды BITMAP HEIGHT.

Определение глубины цвета

Команда BITMAP DEPTH возвращает глубину цвета указанного растрового изображения. У него также есть один параметр - номер битовой карты. Формат команды - BITMAP DEPTH ( Bitmap Number ). Он возвращает значение битовой глубины, показанное в таблице 10.1, а не количество цветов. Программа BitmapInfo демонстрирует, как использовать команду BITMAP DEPTH.

Программа BitmapInfo

Программа BitmapInfo (которая находится на компакт-диске в разделе SourcesChapter10BitmapInfo) загружает файл растрового изображения, а затем отображает ширину, высоту и глубину растрового изображения. Рисунок 10.5 показывает результат работы программы.


Рисунок 10.5: Программа BitmapInfo демонстрирует, как считывать ширину, высоту и глубину цвета растрового изображения.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа BitmapInfo
'---------------------------------

СКРЫТЬ МЫШЬ

'загрузить и отобразить изображение BMP
ShowBitmap ("ЗЕМЛЯ. БМП »)
ПОДОЖДИТЕ КЛЮЧ
CLS
'загрузить и отобразить изображение JPG
ShowBitmap ("SUNSET.JPG")
ПОДОЖДИТЕ КЛЮЧ
CLS
'загрузить и отобразить изображение TGA
ShowBitmap ("EXPLODE.TGA")
ПОДОЖДИТЕ КЛЮЧ
КОНЕЦ

ФУНКЦИЯ ShowBitmap (Имя файла $)
 'загрузить файл растрового изображения
 ЗАГРУЗИТЬ BITMAP Имя файла $, 1
 'отобразить файл растрового изображения
 КОПИРОВАТЬ BITMAP 1, 0
 'читать информацию о растровом изображении
 width $ = STR $ (BITMAP WIDTH (1))
 height $ = STR $ (ВЫСОТА BITMAP (1))
 depth $ = STR $ (BITMAP DEPTH (1))
 'отображать информацию о растровом изображении
 УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
 ТЕКСТ 460, 0, "Bitmap File:" + Filename $
 ТЕКСТ 460, 20, "Размеры:" + ширина $ + "X" + высота $
 ТЕКСТ 460, 40, "Глубина цвета:" + глубина $ + "-бит"
 'удалить растровое изображение из памяти
 УДАЛИТЬ BITMAP 1
КОНЕЧНАЯ ФУНКЦИЯ
 

Основные команды для работы с растровыми изображениями

Теперь, когда вы знаете команды для создания и измерения растровых изображений, пришло время манипулировать ими. Это не так сложно, как кажется. Все команды, необходимые для работы с растровыми изображениями, включены в DarkBASIC. Однако вам нужно будет отслеживать, где каждое растровое изображение находится в массиве растровых изображений. Помните, как я говорил вам, что DarkBASIC поддерживает 32 растровых изображения (0–31)? Следующий набор команд позволит вам управлять этими разными растровыми изображениями.

Копирование одного растрового изображения в другое

Наконец, объясняется команда COPY BITMAP, которую вы использовали в примерах! Это одна из наиболее сложных команд, поскольку она может принимать два разных набора параметров.Если вы хотите скопировать содержимое всего растрового изображения из одного растрового изображения в другое, используйте формат COPY BITMAP From Bitmap , To Bitmap , где все растровое изображение «из» копируется в растровое изображение «в».

Вы используете немного более сложную версию команды, когда хотите скопировать только часть растрового изображения. В этом случае команда COPY BITMAP принимает 10 параметров. Формат команды: COPY BITMAP From Bitmap , Left, Top, Right, Bottom, To Bitmap, Left, Top, Right, Bottom .Параметры From Bitmap и To Bitmap такие же, как и в первой команде. Параметры Left , Right , Top и Bottom с обеих сторон указывают, какие пиксели копировать и куда. Рисунок 10.6 даст вам лучшее наглядное объяснение команды COPY BITMAP.


Рисунок 10.6: Часть одного растрового изображения копируется в другое растровое изображение

В команде COPY BITMAP с 10 параметрами есть ловушка.При копировании пикселей из одного растрового изображения в другое команда COPY BITMAP использует 0,0 в качестве верхнего левого угла. Это означает, что когда вы копируете в растровое изображение или из него, крайнее правое положение, которое вы должны копировать, - это BITMAP WIDTH -1, а крайнее нижнее, которое вы должны копировать, - это BITMAP HEIGHT -1.

Изменение текущего растрового изображения

SET CURRENT BITMAP - наиболее распространенная команда для программирования растровых изображений, поскольку она изменяет номер точечного рисунка, на который направляются команды рисования. Если вы используете команду CIRCLE, нормальный вывод будет на экран, который является битовой картой 0 в массиве.Команда ТЕКСТ работает таким же образом, отрисовывая текущее растровое изображение. Команда SET CURRENT BITMAP позволяет вам изменить текущее растровое изображение. Формат команды: SET CURRENT BITMAP Bitmap Number . Используя эту команду, вы можете рисовать на любом растровом изображении, а не только на экране.

Аналогичным образом команда CURRENT BITMAP возвращает номер текущего активного битового массива. Формат команды: Возвращаемое значение = CURRENT BITMAP () (это означает, что эта команда не имеет параметров). Это полезная команда, которая поможет вам отслеживать, какое растровое изображение вы используете.

Программа CurrentBitmap демонстрирует использование обеих команд (как показано на рисунке 10.7). Эта программа находится на компакт-диске в папке SourcesCh20DarkBASICCurrentBitmap. (Версия DarkBASIC Pro находится в SourcesCh20DBProCurrentBitmap.)


Рисунок 10.7: Программа CurrentBitmap демонстрирует использование команды SET CURRENT BITMAP.

Исходный код программы SetCurrentBitmap следует ниже. Обратите внимание, что после каждого раздела я устанавливаю текущее растровое изображение обратно на 0.Это потому, что я хочу что-то вывести на экран. Я уже говорил вам ранее, что растровое изображение 0 - это экран. Это тот случай, когда вам нужно изменить растровое изображение обратно на 0, чтобы отобразить текст.

Подсказка

Помните, что на экран всегда ссылаются как на растровое изображение 0. Команды рисования, выполняемые на растровом изображении 0, отображаются непосредственно на экране.

'----------------------------------
'Руководство по программированию игр на DarkBASIC для начинающих
'Copyright (C) 2002 Джонатан С.Харбор и Джошуа Р. Смит
'Глава 10 - Программа CurrentBitmap
'----------------------------------

'инициализировать некоторые переменные
maxballs = 10
source = 31
DIM xpos (maxballs)
DIM ypos (maxballs)
DIM xdir (maxballs)
DIM ydir (maxballs)

'инициализировать экран и загрузить исходное растровое изображение
СКРЫТЬ МЫШЬ
СИНХРОНИЗАЦИЯ
ЗАГРУЗИТЬ BITMAP "круги.bmp", источник

'изменить размер шрифта и прозрачность
УСТАНОВИТЬ ПРОЗРАЧНЫЙ ТЕКСТ
УСТАНОВИТЬ РАЗМЕР ТЕКСТА 16

'создать и настроить растровые изображения
ДЛЯ N = 1 ДО maxballs
 'создать растровое изображение и скопировать изображение из источника
 СОЗДАТЬ BITMAP N, 33, 33
 Копировать источник BITMAP, N * 32, 0, N * 32 + 31, 32, N, 0, 0, 32, 32
 'рисуем растровое изображение # на изображении
 SET CURRENT BITMAP N
 ЧЕРНИЛА RGB (10,10,10), 0
 ЦЕНТР ТЕКСТ 14, 6, STR $ (N)
 ЧЕРНИЛА RGB (255,255,255), 0
 ЦЕНТРАЛЬНЫЙ ТЕКСТ 15, 7, STR $ (N)
 'установить исходное положение
 xpos (N) = RND (600)
 ypos (N) = RND (460)
 xdir (N) = RND (4) -3
 ydir (N) = RND (4) -3
СЛЕДУЮЩИЙ N

'рисовать на экране
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
ПОВТОРЕНИЕ
 CLS
 ДЛЯ N = 1 ДО maxballs
 'обновить положение X
 xpos (N) = xpos (N) + xdir (N)
 'убедитесь, что X остается на экране
 ЕСЛИ xpos (N) <10
 xpos (N) = 10
 xdir (N) = xdir (N) * -1
 ENDIF
 ЕСЛИ xpos (N)> 600
 xpos (N) = 600
 xdir (N) = xdir (N) * -1
 ENDIF
 'обновить позицию Y
 ypos (N) = ypos (N) + ydir (N)
 'убедитесь, что Y остается на экране
 ЕСЛИ ypos (N) <10
 ypos (N) = 10
 ydir (N) = ydir (N) * -1
 ENDIF
 ЕСЛИ ypos (N)> 440
 ypos (N) = 440
 ydir (N) = ydir (N) * -1
 ENDIF

 'рисовать растровое изображение на экране
 X = xpos (N)
 Y = ypos (N)
 КОПИРОВАТЬ BITMAP N, 0, 0, 32, 32, 0, X, Y, X + 32, Y + 32
 СЛЕДУЮЩИЙ x
 'обновить экран
 СИНХРОНИЗАЦИЯ
'цикл, пока пользователь не нажмет ESC или не щелкнет мышью
ДО ВЫПУСКА

КОНЕЦ
 

Сохранение растрового изображения в файл

Иногда вам нужно сохранить работу, которую вы делаете. DarkBASIC также предоставляет команду для этого - команду SAVE BITMAP. Опять же, требуется два разных набора параметров. Если вы хотите сохранить содержимое экрана, используйте команду SAVE BITMAP Filename . Если вы хотите сохранить содержимое определенного номера битовой карты, используйте команду SAVE BITMAP Filename, Bitmap Number .

Программа SaveBitmap рисует круги на одном из растровых изображений памяти, а затем сохраняет их в файл на диске с именем output.bmp (см. Рисунок 10.8). Исходный код этой программы приводится ниже.


Рисунок 10.8: Результат, сгенерированный командой SAVE BITMAP в программе SaveBitmap

Примечание

Эту программу необходимо скопировать на жесткий диск, чтобы она работала правильно. Вы не сможете сохранить файл на CD-ROM, потому что он доступен только для чтения.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа SaveBitmap
'---------------------------------

'инициализировать экран
СКРЫТЬ МЫШЬ
СИНХРОНИЗАЦИЯ
ПЕЧАТЬ "Нажмите 'c', чтобы нарисовать круги, 's', чтобы сохранить растровое изображение и выйти."

'выполнить цикл
ДЕЛАТЬ
 'проверить ввод с клавиатуры
 ключ $ = INKEY $ ()
 ЕСЛИ ключ $ = "c" ИЛИ ключ $ = "s"
 Клавиша выбора $
 'рисовать случайные круги
 ДЕЛО "c"
 ЧЕРНИЛА RGB (RND (255), RND (255), RND (255)), 0
 КРУГ RND (640), RND (480), RND (100)
 КОНЕЦ
 'Завершить программу
 ДЕЛО "s"
 ВЫХОД
 КОНЕЦ
 ENDSELECT
 ENDIF
 СИНХРОНИЗАЦИЯ
ПЕТЛЯ

'сохранить экран в файл, а затем выйти
СОХРАНИТЬ BITMAP ».bmp ", 0
КОНЕЦ
 

Удаление растрового изображения

Теперь идет одна из самых важных команд в работе с растровыми изображениями - УДАЛИТЬ BITMAP. Помните, как я говорил вам, что вы можете иметь только 32 растровых изображения одновременно? Команда DELETE BITMAP помогает управлять этими 32 растровыми изображениями, позволяя удалить те, которые больше не используются. После того, как вы закончите работу с растровым изображением, рекомендуется удалить его, чтобы он был доступен где-нибудь в программе. Все растровые изображения удаляются автоматически, когда программа DarkBASIC завершается, но хорошей практикой программирования является удаление вещей, когда они больше не нужны - и до завершения программы.

Осторожно

Помните, что растровое изображение 0 - это особое растровое изображение, указывающее на экран. Таким образом, у вас действительно есть 31 растровое изображение, которое вы можете удалить. Если вы удалите растровое изображение 0, вы можете получить неожиданные результаты.

Команды спецэффектов

DarkBASIC содержит несколько отличных команд специальных эффектов для растровых изображений. С растровыми изображениями можно использовать пять типов специальных эффектов.Это MIRROR, FLIP, FADE, BLUR и SET GAMMA. Эти команды просты в использовании и могут доставлять массу удовольствия.

Зеркальный эффект растрового изображения

Эффект ЗЕРКАЛО, как и в зеркало, переворачивает растровое изображение по горизонтали. Если на изображении есть надпись, надпись будет отображаться в обратном направлении. Команда MIRROR BITMAP принимает один параметр - номер битовой карты. Формат: MIRROR BITMAP Bitmap Number . Программа MirrorBitmap демонстрирует команду и указана ниже (см. Рисунок 10.9). Эта программа находится на компакт-диске в папке SourcesDarkBASICCh20MirrorBitmap. (Проект DarkBASIC Pro находится в SourcesDBProCh20MirrorBitmap.)


Рисунок 10.9: Программа MirrorBitmap демонстрирует эффект зеркального отображения растрового изображения.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа MirrorBitmap
'---------------------------------

'инициализировать программу
СКРЫТЬ МЫШЬ
СЛУЧАЙНЫЙ ТАЙМЕР

'создать два растровых изображения
СОЗДАТЬ BITMAP 2, 640, 240
СОЗДАТЬ BITMAP 1, 640, 240

'нарисовать сообщение на растровом изображении 1
УСТАНОВИТЬ ТЕКСТОВЫЙ ШРИФТ "Times New Roman"
УСТАНОВИТЬ РАЗМЕР ТЕКСТА 48
УСТАНОВИТЬ ТЕКСТ полужирным шрифтом
ЧЕРНИЛА RGB (RND (255), RND (255), RND (255)), 0
ЦЕНТР ТЕКСТ 320, 10, "ЗЕРКАЛЬНЫЙ ЭФФЕКТ BITMAP"
'копируем растровое изображение 1 на экран
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
КОПИРОВАТЬ BITMAP 1, 0

'проведите линию через центр
СТРОКА 0, 235, 639, 235

'скопировать растровое изображение 1 в растровое изображение 2 и отразить его
КОПИРОВАТЬ BITMAP 1, 2
ЗЕРКАЛЬНАЯ КАРТА 2

'отображать растровое изображение 2 на экране
КОПИРОВАТЬ BITMAP 2, 0, 0, 639, 239, 0, 0, 239, 639, 479

подожди, а потом убери
ПОДОЖДИТЕ КЛЮЧ
УДАЛИТЬ BITMAP 2
УДАЛИТЬ BITMAP 1
КОНЕЦ
 

Как узнать, было ли зеркальное отображение растрового изображения? Конечно, с помощью команды BITMAP MIRRORED. Эта команда принимает один параметр - номер битовой карты. Он возвращает 0, если растровое изображение является зеркальным, или 1, если нет. Формат команды - BITMAP MIRRORED ( Bitmap Number ), где Bitmap Number - это проверяемое растровое изображение.

Эффект переворота растрового изображения

Команда FLIP BITMAP похожа на команду MIRROR BITMAP, но работает по вертикали, а не по горизонтали. Эта команда принимает один параметр - номер битовой карты. Формат команды - FLIP BITMAP Bitmap Number .Программа FlipBitmap показывает, как использовать эту команду (см. Рисунок 10.10). Вы можете ввести следующий исходный код или загрузить проект с компакт-диска. Проект находится в SourcesDarkBASICCh20FlipBitmap. (Версия DarkBASIC Pro находится в SourcesDBProCh20FlipBitmap.)


Рисунок 10.10: Программа FlipBitmap демонстрирует эффект переворота растрового изображения.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа FlipBitmap
'---------------------------------

'инициализировать программу
СКРЫТЬ МЫШЬ
СЛУЧАЙНЫЙ ТАЙМЕР

'создать два растровых изображения
СОЗДАТЬ BITMAP 2, 640, 240
СОЗДАТЬ BITMAP 1, 640, 240

'рисовать текст на экране
УСТАНОВИТЬ ТЕКСТОВЫЙ ШРИФТ "Times New Roman"
УСТАНОВИТЬ РАЗМЕР ТЕКСТА 48
УСТАНОВИТЬ ТЕКСТ полужирным шрифтом
ЧЕРНИЛА RGB (RND (255), RND (255), RND (255)), 0
ЦЕНТРАЛЬНЫЙ ТЕКСТ 320, 10, «ЭФФЕКТ ПЕРЕКЛЮЧЕНИЯ BITMAP»
'копируем растровое изображение 1 на экран
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
КОПИРОВАТЬ BITMAP 1, 0

'проведите линию через центр
СТРОКА 0, 235, 639, 235

'скопировать растровое изображение 1 в растровое изображение 2 и перевернуть его
КОПИРОВАТЬ BITMAP 1, 2
FLIP BITMAP 2

'отображать растровое изображение 2 на экране
КОПИРОВАТЬ BITMAP 2, 0, 0, 639, 239, 0, 0, 239, 639, 479

подожди, а потом убери
ПОДОЖДИТЕ КЛЮЧ
УДАЛИТЬ BITMAP 2
УДАЛИТЬ BITMAP 1
КОНЕЦ
 

В то время как команда FLIP BITMAP инвертирует битовую карту по вертикали, команда BITMAP FLIPPED определяет, было ли перевернуто битовое изображение. Эта команда похожа на команду BITMAP MIRRORED в том, что она возвращает 1, если битовая карта перевернута, или 0, если она не перевернута. Синтаксис: BITMAP FLIPPED ( Bitmap Number ).

Эффект затухания растрового изображения

Команда FADE BITMAP уменьшает содержание растрового изображения на определенный процент затемнения. Команда принимает два параметра - номер битовой карты и значение затухания. Значение затухания варьируется от 0 (чернота) до 100 (без затухания). Синтаксис: FADE BITMAP Bitmap Number , Fade Value .После выполнения команды FADE BITMAP эффекты будут постоянными, пока вы снова не создадите или не загрузите растровое изображение.

Программа FadeEffect демонстрирует, как использовать эту команду, перемещая растровое изображение по экрану, постепенно увеличивая и уменьшая его (см. Рисунок 10.11). Эта программа находится на компакт-диске в папке SourcesDarkBASICCh20FadeEffect. (Версия DarkBASIC Pro находится в SourcesDBProCh20FadeEffect. )


Рисунок 10.11: Программа FadeEffect демонстрирует эффект затухания растрового изображения.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
Глава 10 - Программа FadeEffect
'---------------------------------

'создать несколько переменных
выцветание = 100
изменить = -1

'инициализировать программу
СКРЫТЬ МЫШЬ
СИНХРОНИЗАЦИЯ

'загрузить исходное растровое изображение и создать временное растровое изображение
ЗАГРУЗИТЬ BITMAP "tippy.bmp", 1
СОЗДАТЬ BITMAP 2, BITMAP WIDTH (1), BITMAP HEIGHT (1)
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0

ПОВТОРЕНИЕ
 'изменить значение затухания
 исчезновение = исчезновение + изменение
 'bounce fade value от крайностей
 ЕСЛИ затухание <1
 fade = 1
 изменить = 1
 ENDIF
 ЕСЛИ затухание> 100
 fade = 100
 изменить = -1
 ENDIF

 'рисовать выцветшее растровое изображение
 CLS
 КОПИРОВАТЬ BITMAP 1, 2
 FADE BITMAP 2, исчезновение
 КОПИРОВАТЬ BITMAP 2, 0

 'отображать значение затухания на экране
 ТЕКСТ 460, 10, "FADE VALUE:" + STR $ (исчезновение)

 'обновить экран
 СИНХРОНИЗАЦИЯ

'дождитесь нажатия клавиши ESC или щелчка мыши
ДО ВЫПУСКА
КОНЕЦ
 

Эффект растрового размытия

Команда BLUR BITMAP размывает растровое изображение, что делает его нечетким и нечетким. Эта команда принимает два параметра, как и команда FADE BITMAP - номер растрового изображения и значение размытия. Значение размытия колеблется от 1 (пара пива) до 6 (бутылка текилы). Формат команды: BLUR BITMAP Bitmap Number , Blur Value . Как и команда FADE BITMAP, BLUR BITMAP также является постоянным.

Программа BlurEffect демонстрирует команду BLUR BITMAP (см. Рисунок 10.12). Вы можете ввести программу из следующего списка или загрузить ее с компакт-диска в папке SourcesDarkBASICCh20BlurEffect.(Версия проекта DarkBASIC Pro находится в SourcesDBProCh20BlurEffect.)


Рисунок 10.12: Программа BlurEffect демонстрирует эффект размытия растрового изображения.

'----------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа BlurEffect
'----------------------------------

'создать несколько переменных
размытие = 1
изменить = 1

'инициализировать программу
СКРЫТЬ МЫШЬ
СИНХРОНИЗАЦИЯ НА СИНХРОНИЗАЦИИ
СТАВКА 10

'загрузить исходное растровое изображение и создать временное растровое изображение
ЗАГРУЗИТЬ BITMAP "типпи. bmp ", 1
СОЗДАТЬ BITMAP 2, BITMAP WIDTH (1), BITMAP HEIGHT (1)
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0

ПОВТОРЕНИЕ
 'изменить значение затухания
 размытие = размытие + изменение
 'bounce fade value от крайностей
 IF размытие <1
 размытие = 1
 изменить = 1
 ENDIF
 IF размытие> 6
 размытие = 6
 изменить = -1
 ENDIF

 CLS
 'восстановить растровое изображение, используя исходное
 КОПИРОВАТЬ BITMAP 1, 2
 'синий растровое изображение
 BLUR BITMAP 2, размытие
 'нарисуйте размытое растровое изображение
 КОПИРОВАТЬ BITMAP 2, 0

 'отображать значение размытия на экране
 ТЕКСТ 460, 10, "ЗНАЧЕНИЕ РАЗЪЁМА:" + STR $ (размытие)

 'обновить экран
 СИНХРОНИЗАЦИЯ

'дождитесь нажатия клавиши ESC или щелчка мыши
ДО ВЫПУСКА
КОНЕЦ
 

Эффект растровой гаммы

Команда SET GAMMA - последняя из команд специальных эффектов.Он принимает три параметра и регулирует гамма-отображение, которое связано с яркостью изображения. Эти три параметра - красный, зеленый и синий. Каждое значение находится в диапазоне от 0 до 511, при этом 255 - среднее значение. Например, вы можете удалить весь красный цвет из растрового изображения, установив Red = 0. Синтаксис команды: SET GAMMA Red, Green, Blue . Эта команда содержит предупреждение: некоторые видеокарты не поддерживают команду SET GAMMA.

Программа GammaEffect объединяет команды зеркального отражения, переворота, затухания, размытия и гаммы для получения интересного эффекта (см. Рисунок 10.13). Программа находится на CD-ROM по адресу SourcesChapter10GammaEffect. (Версия программы DarkBASIC Pro находится в SourcesDBProCh20GammaEffect.)


Рисунок 10.13: Программа GammaEffect показывает, как команда SET GAMMA изменяет уровень освещенности растрового изображения (или экрана).

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
'Глава 10 - Программа GammaEffect
'---------------------------------

'создать несколько переменных
гамма = 255
изменить = -10

'инициализировать программу
СКРЫТЬ МЫШЬ
СИНХРОНИЗАЦИЯ

'загрузить исходное растровое изображение и создать временное растровое изображение
ЗАГРУЗИТЬ BITMAP "типпи. bmp ", 1
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0

ПОВТОРЕНИЕ
 'изменить значение гаммы
 гамма = гамма + изменение
 'отклонить значение гаммы от крайностей
 ЕСЛИ гамма <0
 гамма = 0
 изменить = 10
 ENDIF
 ПЧ гамма> 510
 гамма = 510
 изменить = -10
 ENDIF

 'нарисовать растровое изображение
 CLS
 КОПИРОВАТЬ BITMAP 1, 0

 'отображать значение гаммы на экране
 ТЕКСТ 460, 10, "ЗНАЧЕНИЕ ГАММЫ:" + STR $ (гамма)

 'обновить экран
 УСТАНОВИТЬ ГАММА гамма, гамма, гамма
 СИНХРОНИЗАЦИЯ

'дождитесь нажатия клавиши ESC или щелчка мыши
ДО ВЫПУСКА
КОНЕЦ
 

ImageShuffle Полная игра на основе растровых изображений

Проект этой главы - увлекательный.Вы помните старые игры с пластиковой плиткой? Те, на которых плитки были пронумерованы от 1 до 15, и вам нужно было расположить числа в правильном порядке? Проект главы имитирует ту игру. Вы просто щелкаете плитку, чтобы переместить ее в пустое пространство. На рис. 10.14 показано, как выглядит игра ImageShuffle при запуске, а на рис. 10.15 показан экран игры после успешного завершения головоломки.


Рисунок 10.14: Игра ImageShuffle в действии. Можете ли вы реорганизовать плитки?


Рисунок 10.15: Игра ImageShuffle завершена. Плитка в порядке.

'---------------------------------
'Руководство для начинающих по программированию игр на DarkBASIC
'Copyright (C) 2002 Джонатан С. Харбор и Джошуа Р. Смит
Глава 10 - Программа ImageShuffle
'---------------------------------

'Данные положения плитки для расчета допустимых ходов
ДАННЫЕ 2,5,0,0
ДАННЫЕ 1,3,6,0
ДАННЫЕ 2,4,7,0
ДАННЫЕ 3,8,0,0
ДАННЫЕ 1,6,9,0
ДАННЫЕ 2,5,7,10
ДАННЫЕ 3,6,8,11
ДАННЫЕ 4,7,12,0
ДАННЫЕ 5,10,13,0
ДАННЫЕ 6,9,11,14
ДАННЫЕ 7,10,12,15
ДАННЫЕ 8,11,16,0
ДАННЫЕ 9,14,0,0
ДАННЫЕ 13,10,15,0
ДАННЫЕ 14,16,11,0
ДАННЫЕ 12,15,0,0

'Объявить некоторые переменные
DIM Плитка (17)
DIM MovingMatrix (64)
Выбрано DIM (2)
DIM MoveIt (4)
TempX = 0
TempY = 0
сделано = 0
Ширина = 0
Высота = 0

'Инициализировать дисплей
СИНХРОНИЗАЦИЯ

'Загрузите игровую графику
ЗАГРУЗИТЬ BITMAP "mainback. бмп ", 17
ЗАГРУЗИТЬ BITMAP "tile.bmp", 18

'Создание растровых изображений плитки
ДЛЯ x = от 1 до 16
 СОЗДАТЬ BITMAP x, 100, 100
СЛЕДУЮЩИЙ x

'Скопируйте растровые изображения плитки
ДЛЯ y = 0 ДО 3
 ДЛЯ x = 0 ДО 3
 pos = (y * 4 + x) + 1
 TX = x * 100
 TY = y * 100
 КОПИРОВАТЬ BITMAP 18, TX, TY, TX + 99, TY + 99, pos, 0,0,99,99
 СЛЕДУЮЩИЙ x
СЛЕДУЮЩИЙ y

'Установить подвижную матрицу
ДЛЯ x = от 1 до 64
 Читать
 MovingMatrix (x) = a
СЛЕДУЮЩИЙ x

'Инициализировать игру
УСТАНОВИТЬ ТЕКУЩУЮ BITMAP 0
ShuffleTiles
Табло
Выбрано (1) = 0
Выбрано (2) = 0

'Основной игровой цикл
ПОВТОРЕНИЕ
 СИНХРОНИЗАЦИЯ
 ЕСЛИ НАЖАТЬ МЫШЬ () = 1
 'Подождите, пока кнопка мыши не будет отпущена
 ПРИ НАЖАТИИ МЫШИ () = 1
 ENDWHILE
 'Выясните, какая плитка была нажата
 bitmap = BitmapNumber (MOUSEX (), MOUSEY ())
 b2 = CheckValid (растровое изображение)

 'Поменяйте местами щелкнутую плитку и пустую плитку
 ЕСЛИ b2 <> 0
 SwapTiles (растровое изображение, b2)
 Табло
 done = CheckForWin ()
 ENDIF
 ENDIF
UNTIL done = 1

'Игра завершена
ПЕЧАТЬ "Поздравляю с победой!"
СИНХРОНИЗАЦИЯ

'Удалите растровые изображения плитки из памяти
ДЛЯ x = от 1 до 16
 УДАЛИТЬ BITMAP x
СЛЕДУЮЩИЙ x

'Конец игры
ПОДОЖДИТЕ КЛЮЧ
КОНЕЦ

'Эта функция рандомизирует плитки
ФУНКЦИЯ ShuffleTiles
 FOR count = от 1 до 16
 Плитки (количество) = количество
 ЕСЛИ count = 16 THEN Tiles (count) = -1
 СЛЕДУЮЩИЙ подсчет
 RandomMoves = RND (50) + 100
 FOR count = 1 TO RandomMoves
 MoveTheSpace
 СЛЕДУЮЩИЙ подсчет
КОНЕЧНАЯ ФУНКЦИЯ

'Эта функция отображает плитки на экране
ФУНКЦИЯ DisplayBoard

 КОПИРОВАТЬ BITMAP 17,0
 ДЛЯ y = 0 ДО 3
 ДЛЯ x = 0 ДО 3
 pos = (y * 4 + x) + 1
 IF Tiles (pos)> = 0
 TX = x * 100
 TY = y * 100
 W = TX + 99 + 120
 H = TY + 99 + 56
 КОПИРОВАТЬ Плитки BITMAP (pos), 0,0,99,99,0, TX + 120, TY + 56, W, H
 ENDIF
 СЛЕДУЮЩИЙ x
 СЛЕДУЮЩИЙ y
 СИНХРОНИЗАЦИЯ
КОНЕЧНАЯ ФУНКЦИЯ

'Эта функция проверяет координаты действительной плитки
ФУНКЦИЯ CheckValid (rx)
 ЕСЛИ rx = -1 ИЛИ Tiles (rx) = -1, ТО ВЫЙТИ ФУНКЦИЯ 0

 ДЛЯ x = от 1 до 16
 ptr = ((x - 1) * 4) + 1
 ЕСЛИ rx = x
 a1 = MovingMatrix (ptr)
 a2 = MovingMatrix (ptr + 1)
 a3 = MovingMatrix (ptr + 2)
 a4 = MovingMatrix (ptr + 3)
 ЕСЛИ a1 <> 0 и плитки (a1) = -1, ТО ФУНКЦИЯ ВЫХОДА a1
 ЕСЛИ a2 <> 0 и плитки (a2) = -1, ТО ВЫЙТИ ФУНКЦИЯ a2
 ЕСЛИ a3 <> 0 и плитки (a3) ​​= -1, ТО ВЫЙТИ ФУНКЦИЯ a3
 ЕСЛИ a4 <> 0 и плитки (a4) = -1, ТО ВЫЙТИ ФУНКЦИЯ a4
 ENDIF
 СЛЕДУЮЩИЙ x
КОНЕЧНАЯ ФУНКЦИЯ 0

'Эта функция возвращает значение растрового изображения, расположенного в x, y
ФУНКЦИЯ BitmapNumber (x, y)
 dx = x - 120
 dy = y - 56
 ЕСЛИ dx <0 или dy <0, ТО ФУНКЦИЯ ВЫХОДА -1

 dx = dx / 100
 dy = dy / 100

 pos = ((dy * 4) + dx) + 1

 ЕСЛИ pos> 16, ТО pos = -1
 ЕСЛИ pos <0 ТО = -1
ENDFUNCTION pos

'Эта функция меняет местами две плитки в массиве Tiles
ФУНКЦИЯ SwapTiles (c1, c2)
 temp = Плитки (c1)
 Плитки (c1) = Плитки (c2)
 Плитка (c2) = temp
КОНЕЧНАЯ ФУНКЦИЯ

'Эта функция перемещает пустую плитку
ФУНКЦИЯ MoveTheSpace
 spt = 0
 ДЛЯ x = от 1 до 16
 ЕСЛИ Плитки (x) = -1, ТО spt = x
 СЛЕДУЮЩИЙ x

 ЕСЛИ spt = 0 ТОГДА ВЫЙТИ ФУНКЦИЯ

 ДЛЯ x = от 1 до 16
 ptr = ((x-1) * 4) +1
 ЕСЛИ spt = x
 MoveIt (1) = MovingMatrix (ptr)
 MoveIt (2) = MovingMatrix (ptr + 1)
 MoveIt (3) = MovingMatrix (ptr + 2)
 MoveIt (4) = MovingMatrix (ptr + 3)

 movenum = RND (3) +1
 ПОКА MoveIt (movenum) = 0
 movenum = RND (3) +1
 ENDWHILE
 c1 = spt
 c2 = MoveIt (movenum)
 SwapTiles (c1, c2)
 ENDIF
 СЛЕДУЮЩИЙ x
КОНЕЧНАЯ ФУНКЦИЯ

'Эта функция сканирует плитки на предмет выигрыша
ФУНКЦИЯ CheckForWin
 ДЛЯ x = от 1 до 15
 ЕСЛИ Плитки (x) <> x ТО ВЫЙТИ ФУНКЦИЯ 0
 СЛЕДУЮЩИЙ x
 Плитка (16) = 16
 Табло
 СОН 2500
 ВЫХОД ФУНКЦИЯ 1
КОНЕЧНАЯ ФУНКЦИЯ
 

Это простая, но веселая игра. Однако есть некоторые вещи, которые вы можете добавить, чтобы сделать эту игру еще более увлекательной. Вот несколько предложений по улучшению игры ImageShuffle.

  • Высокая оценка . Следите за тем, сколько кликов нужно игроку, чтобы решить головоломку.
  • Различные уровни . Используйте разные наборы плиток для каждого уровня игры.
  • Размер платы . Увеличьте количество плиток до 64 (массив из 88).
  • Спецэффекты .Добавьте особый эффект при движении плиток (например, скольжение или исчезновение).

Сводка

Растровые изображения являются ключом к написанию 2D-игр на DarkBASIC, и эта вводная глава лишь коснулась поверхности возможностей DarkBASIC. Есть много разных команд, которые вы можете использовать с растровыми изображениями, например, команды специальных эффектов, описанные в этой главе. В следующей главе растровые изображения полностью перейдут на другой уровень, комбинируя растровое изображение с прозрачностью, используя технику под названием sprite animation .

Викторина

Викторина по главе поможет закрепить материал, изученный вами в этой главе, и предоставит обратную связь о том, насколько хорошо вы усвоили предметы. Ответы на викторину см. В Приложении A, «Ответы на тесты по главам».

1.

Сколько цветов в 8-битном растровом изображении?

  1. 1 000
  2. 256
  3. 16 777 216
  4. 47

2.

Что делает следующий код?

ЗАГРУЗИТЬ BITMAP "images est1.bmp", 1
 
  1. Загружает изображения est1.bmp в растровое изображение 1
  2. Загружает изображение est1.bmp и отображает его на экране
  3. ничего
  4. A и B

3.

Сколько растровых изображений поддерживает DarkBASIC одновременно?

  1. 25
  2. 1 000 90 471
  3. 32
  4. Безлимитный

4.

Какое растровое изображение представляет экран?

  1. 31
  2. 15
  3. 56
  4. 0

5.

Какая команда копирует содержимое битовой карты 1 в битовую карту 0?

  1. КОПИРОВАТЬ BITMAP 0,1
  2. ПОВТОРИТЬ BITMAP 1,0
  3. ВОСПРОИЗВЕДИТЬ BITMAP 1,0
  4. КОПИРОВАТЬ BITMAP 1,0

6.

Какая команда удаляет растровое изображение 1?

  1. УДАЛИТЬ BITMAP 1
  2. СТЕРЕТЬ BITMAP 1
  3. УДАЛИТЬ BITMAP 1
  4. Вы не можете удалить растровое изображение.

7.

Для чего следующий код устанавливает текущее растровое изображение?

bitmapnum = (10/2) +10
SET CURRENT BITMAP bitmapnum
 
  1. 10
  2. 2
  3. 15
  4. 25

8.

Какая команда переворачивает растровое изображение 1 по горизонтали?

  1. FLIP BITMAP 1
  2. MIROR BITMAP 1
  3. FLIP BITMAP 1, по горизонтали
  4. ЗЕРКАЛО 1, горизонтально

9.

Какая команда создает растровое изображение размером 100–150 пикселей?

  1. СОЗДАТЬ BITMAP 100, 150, 1
  2. СОЗДАТЬ BITMAP 150, 1, 100
  3. СОЗДАТЬ BITMAP 1,100,150
  4. СОЗДАТЬ BITMAP 1,150,100

10.

SAVE BITMAP сохранит любое растровое изображение на жесткий диск.

  1. Истинно
  2. Ложь

Ответы

1.

В

2.

В

3.

С

4.

D

5.

D

6.

С

7.

С

8.

В

9.

D

10.

А

Harmony 11 - Как импортировать растровые изображения


Стенограмма видео

Добро пожаловать в руководство "Как импортировать растровые изображения". В этом руководстве я покажу вам, как импортировать растровое изображение, а также все настройки, связанные с этой процедурой. Еще раз, хотя мы закончили предыдущий урок в белом виде для рисования, я переключился на вид с камеры для этого урока вне камеры.Есть несколько способов импортировать растровое изображение. Один из способов - перейти в меню «Файл» вверху и выбрать «Импорт»> «Изображения». Как видите, появляется диалоговое окно «Импорт изображений». Или вы можете щелкнуть этот значок здесь, последний значок на панели инструментов меню «Файл», и, как вы можете видеть, появится то же диалоговое окно «Импорт изображений». Первое, что вам нужно сделать, это нажать на эту кнопку здесь, чтобы просмотреть где-нибудь на вашем компьютере и найти изображение. Обычно вы видите это пустое поле. Я немного импортировал изображения до начала этого урока, так что это уже заполнено.Давайте найдем это изображение. Я собираюсь выбрать этот, FIT_1080x920 и выбрать «Открыть». Затем под заголовком свойства Layers вы можете создать слой, назвав его так, как вы хотите, поэтому я мог бы назвать его FIT, например, без размера, или я мог бы создать слой на основе моего имени файла. Как вы могли заметить, если вы создаете одно имя слоя, он автоматически выбирает ваше имя файла. Это также дает вам возможность изменить имя файла в этом поле. Я собираюсь создать слой на основе моего имени файла.Прямо сейчас пункт «Добавить к существующему слою» выделен серым цветом, потому что ни один из моих слоев на временной шкале не включен. Итак, я собираюсь отменить это и включить свои три слоя, но я заблокировал свой слой Rough, чтобы вы могли видеть, что происходит, когда я это делаю.

На этот раз, если я создам символ из импортированных элементов, и я скажу вам через минуту, почему это так, я могу добавить к существующему слою. Вы можете видеть, что появляются и Чистый, и Супергерой, но не грубый, потому что грубый заблокирован. Если бы он был разблокирован, я бы увидел, что он теперь отображается в этом списке, потому что он включен на временной шкале.Причина, по которой я не могу добавить это изображение к существующему слою, не являясь символом, заключается в том, что сейчас я сохраняю его как исходное растровое изображение. Однако, если бы я хотел импортировать его как рисунок Toon Boom Bitmap, что означает, что это растровое изображение в векторном фрейме, как вы можете видеть, у меня есть возможность «Добавить в существующий слой». Но я могу добавить только к чистому слою, потому что, если вы помните, наш чистый слой - это слой растрового рисования, и мы использовали растровую кисть, чтобы очертить нашего персонажа супергероя на этом слое.Однако, если я затем конвертирую в векторный рисунок Toon Boom, что в основном означает, что я векторизирую свой рисунок, у меня также есть возможность добавить к существующему слою, но на этот раз я могу добавить только слой супергероя, потому что, если вы помните, это векторный слой, и именно здесь я обрисовал своего супергероя с помощью линий карандаша, то есть векторных линий карандаша. В этом случае я просто собираюсь создать новый слой. Я собираюсь основывать это на имени файла. Я не собираюсь помещать это в символ, и поскольку я хочу показать вам, что происходит, когда я использую эти три варианта здесь, я начну с первого, Сохранить как исходное растровое изображение, и скажу вам о Согласовании и Прозрачности чуть позже. Давай сначала сделаем это и скажем ОК.

Я просто собираюсь снова отключить эти три слоя на временной шкале. Единственное, что я хочу, чтобы вы от этого узнали, это то, что если вы импортируете изображение и сохраните его в качестве исходного растрового формата, вы не сможете использовать какие-либо инструменты рисования на этом растровом изображении. Вы можете сразу увидеть, как я провожу инструмент Select Tool по изображению, что есть белый кружок с крестом на нем, что означает, что его нельзя использовать. Я нажимаю, и с этим изображением ничего не происходит.Я могу попробовать использовать любые инструменты для рисования, но ни один из них не работает. Единственное, что будет работать, - это инструменты из панели инструментов анимации, такие как Transform Tool. Используя это, я мог бы, например, повернуть свое изображение и создать ключевые кадры для движений, которые я делаю. В дополнение ко всему этому, обратите внимание здесь, на временной шкале, рядом с именем файла или именем слоя, что символ не похож на символ, который вы видите для всех других слоев рисования. Это потому, что хотя Clean - это слой растрового рисования, на самом деле он похож на второй вариант в диалоговом окне «Импорт изображений».Это растровое изображение, но в векторном кадре. Итак, этот символ означает, что на самом деле это просто растровое изображение. Здесь вообще нет векторной рамки, и ею нельзя манипулировать, и на самом деле этот значок представляет собой небольшую горную сцену с небольшим солнцем, поэтому вы действительно можете увидеть, что это похоже на фотографию. Это растровое изображение.

Давайте импортируем другое изображение. Я собираюсь снова нажать кнопку «Обзор», и на этот раз я выберу «Панорама» и скажу «Открыть». Я собираюсь оставить все то же самое, за исключением того, что в разделе «Выравнивание» вместо выбора «Подогнать» я выберу «Панорама» и скажу «ОК».Если мы уменьшим масштаб, то увидим, что импорт «Подгонка» и «Панорама» сильно отличается. Начнем с Fit. Когда вы выбираете «Подогнать», программа масштабирует изображение так, чтобы его высота соответствовала высоте сцены. Что произошло, когда мы импортировали Pan, так это то, что он подготавливает изображение к съемке как Pan. Если вы не знаете, что такое панорамирование, это когда вы берете фон, например, и перемещаете камеру, или перемещаете фон, и вы делаете это. В случае такой вертикальной кастрюли, это может быть, скажем, кто-то, падающий в кроличью нору, и персонаж будет оставаться на месте, возможно, двигая руками и ногами.Похоже, что он падает, но что на самом деле происходит, так это то, что мы панорамируем фон, поэтому на нем есть некоторое вертикальное движение. Конечно, это чаще всего встречается в классическом стиле: панорама движется слева направо, когда, скажем, в центре кадра едет машина. Чтобы было похоже, что он движется вперед по направлению к правой стороне, вы должны потянуть фоновое изображение влево вот так.

Затем, если мы импортируем третье изображение, то есть PR является разрешением проекта, мы можем его открыть.В раскрывающемся меню «Правила выравнивания» мы можем выбрать «Разрешение проекта» и сказать «ОК». Теперь позволь мне спрятать Пан. С помощью разрешения проекта вы можете видеть, что собственный размер этого изображения представлен пикселем за пикселем в представлении камеры. Мы знаем это, потому что размер этого изображения, который имеет тот же размер, что и у Fit и Pan, составляет 1080x1920. Размер сцены нашего проекта - 1920x1080, поэтому точные размеры, но с обратной высотой и шириной. Если мы выберем это изображение и повернем его ровно на 90 °, вы увидите, что оно идеально вписывается в рамку камеры.Теперь давайте посмотрим на настройки прозрачности. Давайте еще раз импортируем изображение и оставим все по-прежнему. Давайте импортируем как исходное растровое изображение, сохраним разрешение проекта, но я собираюсь импортировать одно и то же изображение четыре раза: один раз с предварительным умножением на белый, один раз с предварительным умножением на черный, один раз с прямым и один раз с цветом закрепки на Alpha. На самом деле я выберу другой образ. Я собираюсь выбрать эти камни, созданные в Photoshop, в качестве фонового изображения.

Я просто отключу изображение Project Resolution, и давайте сбросим его здесь. Это изображение, как и три, которые я ранее импортировал, также имеет такое же разрешение 1920х1080, за исключением, очевидно, того, что оно подходит горизонтально или в альбомной ориентации. Вы можете видеть это, потому что если я выберу «Разрешение проекта», они идеально подходят и не будут размытыми. У них хорошее разрешение. Настройка прозрачности довольно тонкая, первая из них - предварительное умножение на белый.Если мы здесь немного увеличим масштаб, давайте взглянем на край нашего изображения. Мы можем видеть, что вокруг нашего изображения есть своего рода светящаяся линия, и это то, что у всех растровых изображений, как мы видели, они исчезают по краям. Пиксели по краям изображения становятся немного более прозрачными и более прозрачными. Pre-Multiplied with White принимает цвет этих пикселей, а также их прозрачность, и умножает их на белый. Не путайте белый пигмент с белым светом.Например, если я добавлю белый пигмент к красному пигменту, скажем, когда вы рисуете, вы получите бледно-розовый. Это не обязательно будет работать так же, когда вы умножаете белый пиксель на красный. Это не так очевидно, как наличие белой рамки по сравнению с черной рамкой. На самом деле это просто пиксели, умноженные на белый. Если мы добавим в нашу сцену цветовую карту, которая по умолчанию белая, и включим режим визуализации, мы сможем увидеть разницу более четко.Позвольте мне немного увеличить здесь. Вам нужно очень близко увеличить масштаб, чтобы увидеть, но вы видите такую ​​цветную линию в виде радуги. Вот так выглядит предварительное умножение на белые.

Если мы затем отключим изображение с предварительным умножением на белый и посмотрим на изображение с предварительным умножением на черный, мы заметим, что такая радужная линия пикселей уходит. Если мы вернемся к Open GL View и, возможно, немного уменьшим масштаб, вы просто увидите, что края окрашены по-другому, и это потому, что на этот раз они были предварительно умножены на черный.

Если мы затем посмотрим на параметр «Прямая прозрачность», вы не увидите границы цветных пикселей. По краям выглядит очень чисто. И последний - «Прижать к цвету альфа». На самом деле я не вижу здесь большой разницы в этом случае, но я могу очень быстро показать вам, что это значит. Я собираюсь отменить выбор этого слоя и перейти к чистому слою, потому что это слой растрового рисования. Итак, мы получаем нашу цветовую палитру растрового изображения. Позвольте мне создать новый цвет. Я собираюсь присвоить этому цвету значения RGB 250, 180 и 30.На самом деле давайте перейдем к просмотру HSV, чтобы вы могли увидеть, что он похож на желтый. Затем, если я решу создать второй образец с половиной этих значений, таким образом, половина 250 равна 125, половина 180 равна 90, а половина 30 равна 15, вы увидите, что я получаю золотисто-коричневый цвет. Но вы можете сказать, что это то же значение оттенка. Это почти так же, как если бы вы взяли палитру цветов и сдвинули ее вниз, чтобы получить эти половинные значения, я хочу сказать, что когда вы фиксируете цвет на альфа-канал, значение прозрачности пикселей на краю вашего изображения составляет, скажем, 50%, а затем значения RGB будут умножены на 50%, чтобы получить цвет края. Таким образом, вы получите половину значений в этой точке прозрачности. Может быть, это слишком много дополнительной технической информации. Что вам действительно следует делать при импорте изображений, так это просто попробовать импортировать одно и то же изображение с разными настройками прозрачности и, в зависимости от вашего фона, посмотреть, какое из них лучше всего сочетается. Кроме того, вы всегда должны тестировать в Render View, давайте вернемся к нашим изображениям здесь, чтобы действительно получить хорошее представление о том, как выглядит изображение, потому что это то, как оно будет выглядеть при визуализации.Если, например, это изображение не было 920x1080, как я знаю, оно могло бы казаться более размытым в представлении рендеринга или оно могло бы казаться размытым здесь, в представлении Open GL, но это только потому, что программное обеспечение отображает версию изображения с более низким разрешением. изображение, чтобы вы могли работать быстрее. Поэтому всегда лучше тестировать в режиме рендеринга, потому что Open GL View не даст вам точного представления о том, как будет выглядеть ваше изображение после рендеринга.

Я собираюсь отключить эту цветовую карту, и мы также отключим этот слой.Давайте посмотрим на некоторые другие варианты импорта. На этот раз я собираюсь сохранить все свои настройки слоя такими же, как и раньше, но мы собираемся взглянуть на Импорт как растровый рисунок Toon Boom. Я собираюсь выбрать это, и на самом деле я собираюсь просмотреть другое изображение. Я начну с этого. Это телевизор по горизонтали. Это потому, что, если вы заметили здесь, в правилах выравнивания, у нас есть три варианта правил: «По горизонтали», «По вертикали» и «Фактический размер».Давайте начнем с горизонтального изображения как растровый рисунок Toon Boom и скажем ОК. Давайте немного уменьшим масштаб. На временной шкале здесь мы видим, что горизонтальное изображение нашего Toon Boom имеет другой символ. Мы уже знаем, что это слой растрового рисунка, а не просто растровый слой, потому что значок другой. На самом деле это то же самое, что и чистый слой. Проще говоря, это растровый рисунок в векторной рамке. Но на практике это означает, что вы можете использовать инструменты рисования, чтобы в определенной степени манипулировать этим изображением.Например, если я использую инструмент «Выбор», я могу выбрать изображение, которое раньше не удавалось сделать. Похоже, я могу его повернуть. Вы можете увидеть, как появляется значок, вы можете масштабировать его и т. Д. Вы также можете взять инструмент «Кисть» и нарисовать на своем изображении. Вы можете манипулировать изображением и работать с ним, чего вы не смогли бы сделать, если бы оставили изображение в его исходной растровой форме.

Если мы посмотрим на фактическую подгонку по горизонтали, мы заметим, что программное обеспечение взяло ширину изображения и сопоставило ее с шириной сцены вашего проекта.Вот как будет выглядеть Horizontal Fit. Если мы затем введем вертикальную подгонку, и мне придется скрыть горизонталь, чтобы вы могли это увидеть, это будет выглядеть так. На самом деле он выглядит как раз при импорте исходного растрового изображения. Он соответствует высоте изображения высоте сцены проекта. Чтобы вы знали, на этот раз я выбрал оранжевый цвет фона, а не черный, чтобы вы знали, что это опция Toon Boom в диалоговом окне «Импорт изображений». Когда он говорит «Импортировать как рисунок растрового изображения Toon Boom», он просто дает вам визуальную ссылку, которая оранжевым цветом относится к этому выбору.

Давайте приведем последний, который здесь является фактическим размером. Мы откроем его, выберите «Фактический размер» и нажмите «ОК». И снова мы видим, что похоже на правило выравнивания разрешения проекта, когда вы вводите исходное растровое изображение. Опять же, мы знаем это, потому что, если выбрать «Фактический размер» и заметить, что на этот раз я использую инструмент «Выбор», а не инструмент «Трансформирование», и поворачиваю его на 90 °, вы можете увидеть, что происходит то же самое. Он отображается пиксель за пикселем в размеры сцены проекта.Лучше проиллюстрировать этот пример, если мы принесем изображение с половинным разрешением. Это изображение с фактическим размером 540x960, что составляет ровно половину от 1080x1920. Видно, что он вдвое меньше. Может быть, это лучше проиллюстрировать таким образом. Вы можете видеть, что это ровно половина высоты и половина ширины. Это вдвое меньше. Это половина разрешения. Это выглядит именно так в вашем проекте.

Давайте посмотрим на настройку прозрачности для растрового рисунка Toon Boom. Я собираюсь снова просмотреть это фоновое рок-изображение, которое мы видели ранее, но на этот раз я собираюсь импортировать его три раза в фактическом размере еще раз с предварительно умноженным белым, черным и затем прямым.Давайте снимем выделение с оранжевого рисунка «Фактический размер» и сбросим вид, чтобы увидеть, что здесь происходит. Если мы снова увеличим масштаб еще раз, то увидим радужные пиксели по краям. У меня выбраны все три слоя. Итак, давайте посмотрим на первую, которая предварительно умножена на белые. В отличие от исходного растрового изображения, даже в Open GL View мы можем ясно видеть эту линию пикселей, которые были предварительно умножены на белый. Если вы помните, в растровых изображениях этот уровень ярких пикселей отображался только тогда, когда мы просматривали их в режиме рендеринга.Если я снова включу Цветную карту и сделаю это, мы увидим, что граница разноцветных пикселей все еще существует, но они немного мягче. Еще раз, я увеличен на 320%, поэтому мы так четко видим эти пиксели. Если мы вернемся в режим Open GL и посмотрим на каменный фон, предварительно умноженный на черный, мы увидим, что есть граница из пикселей цвета радуги, но вы увидите, что они окрашены немного иначе. Очевидно, умножение на белый и черный дает другую цветовую комбинацию.

Тогда просто Straight выглядит точно так же, очень обрезанный край, но он по-прежнему выглядит довольно хорошо в Render View, и нет опции Clamp Color to Alpha для импорта растрового изображения Toon Boom. Я собираюсь скрыть это и снова сбросить вид, перейти в режим Open GL и еще раз нажать кнопку «Импорт изображений». Давайте посмотрим на последнюю опцию импорта, которая предназначена для преобразования в векторный рисунок Toom Boom, а не в растровое изображение. Возможно, вы уже догадались, что он векторизует ваш рисунок.Я собираюсь выбрать рисунок, который имеет немного больше смысла. Я тут немного обманул. На самом деле я экспортировал трассировку нашего персонажа супергероя, но не векторную трассу, как мы сделали с линиями карандаша, а трассировку растрового изображения на чистом слое. Мы точно знаем, что это растровое изображение. Мы также знаем, что это растровое изображение, потому что это JPEG. Нажмите «Открыть», и я покажу вам два разных варианта векторизации: черный и белый и серый. Начнем с черно-белого и нажмем ОК.

Как вы могли заметить, правил выравнивания нет. Это всегда подходит. Давайте немного уменьшим масштаб, и вы это увидите. Затем давайте увеличим масштаб, и вы увидите, выделим ли мы эти линии, что они имеют векторный контур. Например, на этом векторном слое, если я создаю мазок кисти, а затем выбираю его, вы можете увидеть, что этот мазок кисти имеет векторный контур. Это то же самое, что мы видим здесь. Эта когда-то растровая линия теперь имеет векторный контур, что означает, что ею можно манипулировать. Его можно стереть, можно нарисовать.Вы даже можете заполнить его таким цветом, потому что теперь он векторизован на векторном слое. Затем, если мы вернемся к нашей кнопке Импорт изображения и выберем тот же рисунок, но на этот раз мы выберем Серый в параметрах векторизации и нажмем ОК, а затем скроем наш векторизованный рисунок, вы увидите, что он больше похож на исходный чистый рисунок, который мы нарисовали программное обеспечение. Немного мягче, там оттенки серого, а не сплошная черная линия. Но в то же время, поскольку он находится на векторном слое, вы можете сделать то же самое, что и мы.Вы можете закрасить зоны, вы можете использовать Ластик, чтобы стереть линию, вы можете манипулировать им с помощью любого из инструментов рисования и т. Д.

Теперь, когда мы знаем обо всех различных параметрах импорта, я собираюсь сделать следующее: импортировать кучу фоновых элементов для нашей сцены. Прежде чем я это сделаю, я собираюсь удалить все эти слои, которые нам не нужны, нажав [Shift] + выделив их, а затем нажав кнопку «Удалить». Я также собираюсь избавиться от нашей цветовой карты, так что теперь мы именно там, где мы начали в начале урока, со слоем Superhero, слоем Clean и слоем Rough.Вернемся к нашей кнопке «Импорт изображений». Давайте посмотрим. Я хочу сделать множественный выбор. Я собираюсь выделить все, что мы видим здесь, что начинается со слова BG, то есть City, Moon, Rocks_back, Rocks и Sky. Я собираюсь выбрать первый, удерживая [Shift], выбрать пятый, а затем нажать кнопку «Открыть». Что я собираюсь сделать, так это создать слои на основе имен файлов. Я собираюсь импортировать их как растровые рисунки Toon Boom, я сохраню их в фактическом размере, а прозрачность сохраню как прямую.Нажимаем ОК.

Давайте сбросим наше представление, чтобы вы могли увидеть, как это выглядит. Возможно, нам нужно просто изменить кое-что здесь. На переднем плане я хочу, чтобы эти камни были здесь, поэтому я перетащу их над городом, а другой набор камней здесь. Я могу включать и отключать их, чтобы вы могли видеть, как это выглядит. У нас есть фон неба, луна, камни на заднем фоне, которые более прозрачны, поэтому они сливаются с фоном, что дает им эту атмосферную перспективу, поэтому они смотрят дальше, потому что выглядят так, как будто они сливаются с цветом неба, город и скалы.Поскольку они импортируются как растровые рисунки Toon Boom, мы знаем, что можем манипулировать этими рисунками, но они сохраняют в себе прекрасное качество рисования. Это все, что касается учебника «Как импортировать растровые изображения». Следите за обновлениями для следующего урока, Как создать вырезанного персонажа.

Создание файлов вывода растровых изображений - 3ds Max: Substance to V-Ray Workflows Видеоурок

Обзор Стенограммы Файлы упражнений Просмотр в автономном режиме

Детали курса

Узнайте, как использовать набор инструментов на основе веществ от Allegorithmic для создания фотореалистичных текстурных карт для ваших проектов 3ds Max. В этом курсе вы можете изучить рабочий процесс интеграции Substance Designer, Substance Painter и узла Bitmap2Material (B2M) с 3ds Max. Брайан Брэдли объясняет, что такое инструменты на основе веществ и как их использовать в приложении 3ds Max, а также в движке рендеринга V-Ray. Он демонстрирует, как создавать материалы из фоторесурсов с помощью узла B2M, как работать с материальными материалами из Substance Designer и как экспортировать растровые текстуры из Substance Designer и Substance Painter для использования в 3ds Max и V-Ray.

Инструктор

  • Брайан Брэдли

    Автор внештатных тренингов для LinkedIn Learning и Pixel Academy

    Брайан Брэдли - 3D-художник-самоучка и владелец бизнеса.

    Брайан начал экспериментировать с творческим программным обеспечением и 3D-приложениями примерно в конце 1993 года, задаваясь вопросом, сможет ли он зарабатывать на жизнь, работая с такими классными инструментами! К 1998 году он начал свой собственный мультимедийный бизнес, работая над проектами, начиная от летающих логотипов и заканчивая графическим дизайном одежды и автомобилей и проектами визуализации целых продуктов и архитектуры.

    Изучая инструменты своего дела, Брайан остро осознал необходимость хорошо объясненного, высококачественного обучения, которое могло бы сделать программные инструменты доступными и открытыми для всех, кто хотел бы их изучить.В 2007 году он обратил внимание своего семейного бизнеса на постоянное обучение других людей графическому дизайну и инструментам производства, которые он любит.

    Узнать больше Видеть меньше

Навыки, описанные в этом курсе

Зрители этого курса

1608 человек смотрели этот курс

Руководство по растровым изображениям для начинающих

Автор Пол Бурк.
Отрисовки и модели Питера Дипроуза и Билла Раттенбери.
Оригинал, ноябрь 1993 г.

Перевод на итальянский язык непредвзятых отзывов.com и Boutiquesetup.com
Перевод на португальский язык Артура Вебера и Аделины Домингос
Украинский перевод предоставил Дмутро Нечупорык

Введение

Этот документ представляет собой элементарное введение в растровые изображения. поскольку они используются в компьютерной графике.

Определение

Растровые изображения определяются как регулярная прямоугольная сетка ячеек, называемых пикселями, каждая пиксель, содержащий значение цвета. Они характеризуются всего двумя параметрами: количество пикселей и информационное содержание (глубина цвета) на пиксель.Есть и другие атрибуты, которые применяются к растровым изображениям, но они являются производными этих двух основных параметров.

Обратите внимание, что растровые изображения всегда ориентированы горизонтально и вертикально. Пикселей следует считать квадратными, хотя они могут иметь другое соотношение сторон практика.
В большинстве случаев растровые изображения используются для представления изображений на компьютер. Например, ниже показано растровое изображение, которое имеет 397 пикселей. по горизонтали, 294 пикселя по вертикали, и каждый пиксель содержит серый значение из 256 возможных оттенков серого.

Цвет «глубина»

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

1 бит (черно-белый)

Это минимально возможное информационное содержание, которое может храниться для каждого пиксель.Полученное растровое изображение называется монохромным или черно-белым. В пиксели с 0 обозначаются как черные, пиксели с 1 обозначаются как белый. Обратите внимание, что хотя возможны только два состояния, они могут быть интерпретированы как любые два цвета, 0 отображается на один цвет, 1 отображается на другой цвет.

8-битный серый

В этом случае каждый пиксель занимает 1 байт (8 бит) памяти, в результате получается 256 разные состояния. Если эти состояния отображаются на градиенте серого от черного до white растровое изображение обозначается как изображение в оттенках серого.По соглашению 0 обычно черный и 255 белый. Уровни серого - это числа между ними, для Например, в линейной шкале 127 будет уровень серого 50%.

В любом конкретном приложении диапазон значений серого может быть любым, это чаще всего отображают уровни 0–255 по шкале 0–1, но некоторые программы отображают его по шкале 0-65535 (см. систему цветовой спецификации яблок как пример).

24-битный RGB

Это следующий шаг от 8-битного серого, теперь каждому выделено 8 бит красный, зеленый и синий компоненты. В каждом компоненте значение 0 означает отсутствие вклад этого цвета, 255 относится к полностью насыщенному вкладу этого цвета цвет. Поскольку каждый компонент имеет 256 различных состояний, всего имеется 16777216 возможных цветов.

Идея цветового пространства RGB является фундаментальной концепцией компьютерной графики. В RGB-пространство любой цвет представлен как точка внутри цветового куба с ортогональные оси r, g, b.

Обратите внимание, что значения серого образуют прямую линию от черного к белому вдоль диагональ куба, r = g = b.

8-битный индексированный цвет

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

У такой системы цветовой индексации есть ряд интересных атрибутов. Если в изображении меньше 256 цветов, то это растровое изображение будет такое же качество, как и 24-битное растровое изображение, но оно может быть сохранено с одной третью данных.Интересные эффекты раскраски и анимации можно получить, просто изменив палитры, это немедленно изменяет внешний вид растрового изображения и с тщательный дизайн может привести к преднамеренному изменению внешнего вида битовая карта.

Распространенной операцией по уменьшению размера больших 24-битных растровых изображений является преобразование их в индексированный цвет с помощью оптимизированной палитры, то есть палитры, которая лучше всего представляет цвета, доступные в растровом изображении.

4-битный индексированный цвет

Это идентично 8-битному цвету, за исключением того, что теперь используется только половина байта, 4 бита. для индекса.Это поддерживает таблицу до 16 цветов.

32-битный RGB

Обычно это то же самое, что и 24-битный цвет, но с известным дополнительным 8-битным растровым изображением. как альфа-канал. Этот канал можно использовать для создания маскированных областей или представляют собой прозрачность.

16-битный RGB

Обычно это прямая система с 5 битами на компонент цвета. и 1-битный альфа-канал.

Разрешение

Разрешение - это атрибут растрового изображения, который необходим при визуальном просмотре. или печать растровых изображений, потому что пиксели сами по себе не имеют явных размеров.Разрешение обычно указывается в пикселях на дюйм, но может быть выражено в любая другая единица измерения. Большинство процессов печати сохраняют количество пикселей на дюйм (DPI) единиц по историческим причинам. На устройствах с nn прямоугольных пикселей разрешение может быть указано двумя числами: по горизонтали и по вертикали. разрешающая способность.

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

В качестве примера рассмотрим одно растровое изображение размером 200 пикселей по горизонтали и 100 пикселей. пикселей по вертикали. Если бы это растровое изображение было напечатано с разрешением 100DPI, оно бы измеряло 2 дюймы на 1 дюйм. Если, однако, то же растровое изображение было напечатано с разрешением 200 DPI, оно будет измерять только 1 дюйм на полдюйма.

Всякий раз, когда растровое изображение отображается на мониторе компьютера, разрешение должно быть считается.Большинство компьютерных мониторов имеют диапазон разрешения от 60 точек на дюйм при максимальном разрешении. конец низкого разрешения до 120 точек на дюйм для дисплеев с высоким разрешением. Как и с печатным имеет значение, чем выше разрешение, тем менее очевиден пиксельный характер изображения. растровое изображение будет.

В качестве дополнительного примера следующие два изображения идентичны по информации. контент, однако они имеют разное разрешение и, следовательно, разные пиксели размеры. Меньший - 80 точек на дюйм, а больший - 30 точек на дюйм. Пикселей намного больше очевидно в более крупной версии.

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

Преобразование глубины цвета.

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

В качестве примера рассмотрим проблему представления изображений в градациях серого на монохромные (черно-белые) устройства. Это достигается с помощью переменной количество черных и белых пикселей для отображения уровня серого. К счастью, черно-белое устройство обычно имеет гораздо более высокое разрешение, чем растровое изображение, поэтому для создания приближения оттенков серого доступно несколько пикселей. Рассмотрим растровое изображение в оттенках серого 75 точек на дюйм для отображения на черно-белом 300 точек на дюйм. принтер. Имеется матрица из чёрно-белых пикселей 4х4, которую можно использовать для представляют каждый пиксель шкалы серого.

Существует ряд методов, которые можно использовать для формирования соответствующих При расположении черных и белых пикселей один метод называется дизерингом. Четный с использованием дизеринга существует множество возможных алгоритмов для определения дизеринга. расположение пикселей. Ниже показано изменение уровня серого с соответствующие черно-белые примеры с дизерингом (сильно увеличены) с использованием паттерн и диффузное дизеринг.

Как уже упоминалось, существуют и другие методы преобразования растровых изображений высокого разрешения. глубину цвета в цвета с меньшей глубиной цвета, но с более высоким разрешением на таких Техника, используемая в полиграфической промышленности, называется растрированием.Скрининг не будет можно обсудить здесь, за исключением того, что он приближает уровни серого по разным размер объектов (размер объекта пропорционален уровню серого) объекты расположены в регулярной матрице под некоторым углом к горизонтальный. Наиболее часто используемые объекты изображения - это точки, линии и прямоугольники. Ниже показано изменение уровня серого с соответствующим черным и примеры с белым экраном (сильно увеличенные) с использованием точечного и линейного экранов.

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

Хранилище растровых изображений

Самый простой способ сохранить растровое изображение - просто перечислить растровое изображение информация, байт за байтом, строка за строкой. Файлы, хранящиеся этим методом, часто называется файлами RAW. Объем дисковой памяти, необходимый для любого растрового изображения, легко вычислить с учетом размеров растрового изображения (N x M) и глубины цвета в битах (B).Формула размера файла в килобайтах:

где N и M - количество горизонтальных и вертикальных пикселей, B - количество бит на пиксель. В следующей таблице показаны размеры файлов нескольких растровых изображений. типы, если они хранятся в формате RAW.

 размер изображения глубина цвета размер файла
    128 x 128 1 бит 2 КБ
                          8 бит 16 КБ
                         24 бит 48 КБ
    256 x 256 1 бит 8 КБ
                          8 бит 64 КБ
                         24 бит 192 КБ
     1K x 1K 1 бит 128 КБ
                          8 бит 1 МБ
                         24 бита 3 МБ
 

Как видно из этой таблицы, большие 24-битные изображения приводят к очень большим файлов, поэтому сжатие становится важным.Существует большое количество форматов файлов, используемых для хранения сжатых растровых изображений. от банального до очень сложного. Сложные форматы существуют, потому что очень больших файлов растровых изображений, которые существовали бы, если бы не использовалось сжатие. Существует две широких категории форматов сжатых файлов: без потерь (отлично сохраняют растровые изображения) и с потерями. В Ниже показана основная иерархия методов сжатия.

Самый грубый способ уменьшить размер файлов растровых изображений - уменьшить цвет информации, это называется сокращением битов или квантованием.Например один мог преобразовать 24-битные растровые изображения в 8-битные индексированные растровые изображения, используя дизеринг для имитировать потерянные цвета. Самым распространенным форматом с потерями на сегодняшний день является JPEG, описание того, как это работает, выходит за рамки данного обсуждения. это Основным преимуществом является то, что он может предложить значительно лучшую степень сжатия, чем форматы без потерь. Например, считайте следующее растровое изображение оригиналом что составляет 500 x 350 пикселей при 24-битном цвете. Используя формулу, приведенную ранее, размер несжатого файла: 500 x 350 x 24/8/1024 = 513K

Сохраненный в оттенках серого (уменьшение глубины цвета) файл имеет размер 171 КБ (в 3 раза меньше), сохранены и сжаты с использованием RLE это 388K (75% оригинала), сохранено с помощью Сжатие LZW составляет 188 КБ (36% от оригинала), в формате JPEG - 30 КБ ( степень сжатия 17: 1).
Ниже приводится описание простейшего метода сжатия без потерь. называется кодированием длины серии (RLE), который используется с хорошим эффектом для растровых изображений с всего несколько цветов. Рассмотрим следующее маленькое 8-битное изображение 17 x 10 пикселей.

Если бы это было сохранено в формате RAW, ему потребовалось бы 16 байтов на строку для всех 10 ряды. Однако первые две строки находятся на одном уровне, поэтому они более эффективны. просто сохранить количество одинаковых цветов в серии вместе с цветом серии. Для первых двух строк вместо 16 байтов требуется только 2 байта каждая.

В исходном формате первые три строки будут

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
 
Используя кодировку длины серии, первые три строки будут
16 0
16 0
2 0 12 1 2 0
 

Хотя в фактических реализациях RLE, чем описанный здесь, это основной принцип кодирования длин серий. В целях для достижения некоторой степени сжатия RLE должны выполняться прогоны того же цвета, по этой причине он вряд ли пригодится для сильно окрашенных изображения, такие как 24-битные фотографии.

Грязные растровые изображения и инкрементное резервное копирование - документация QEMU 5.0.50 (v5.0.0-2099-geb2c66b10e)

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

В этом документе объясняются концептуальные механизмы, а также актуальные, полная и исчерпывающая документация по API для управления ими. (Надеюсь, «почему», «что» и «как».)

Целевая аудитория этого документа - разработчики, добавляющие QEMU функции резервного копирования для приложений управления или опытных пользователей, которые запускают и администрировать QEMU напрямую через QMP.

Растровые изображения - это битовые векторы, где каждый бит «1» в векторе указывает на измененный («Грязный») сегмент соответствующего блочного устройства. Размер сегмента то, что отслеживается, является детализацией растрового изображения. Если степень детализации битовая карта составляет 64 КБ, каждый бит «1» означает, что область 64 КБ в целом может иметь изменены каким-то образом, возможно, всего на один байт.

Меньшая степень детализации означает более точное отслеживание измененных данных на диске, но требует дополнительных вычислительных затрат и больших размеров растрового изображения. Больше Гранулярность означает меньший размер растрового изображения, но менее целевое резервное копирование.

Размер растрового изображения (в байтах) можно вычислить следующим образом:

size = ceil (ceil ( image_size / гранулярность ) / 8)

например размер растрового изображения с гранулярностью 64 КБ в образе 2 ТиБ составляет:
размер = ((2147483648K / 64K) / 8)

= 4194304B = 4 МБ.

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

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

То есть: вероятно, наиболее полезно отслеживать записи гостя на диск, но теоретически вы можете отслеживать изменения метаданных qcow2 с помощью прикрепление растрового изображения в другом месте графа хранилища.Это выходит за рамки этого документа.

QEMU поддерживает сохранение этих растровых изображений на диск через формат изображения qcow2. Растровые изображения, которые сохраняются или загружаются таким образом, называются «постоянными», тогда как растровые изображения, которых нет, называются «временными».

QEMU также поддерживает миграцию обоих переходных растровых изображений (отслеживание любых произвольный формат изображения) или постоянные растровые изображения (qcow2) через динамическую миграцию.

QEMU поддерживает все описанные ниже функции в формате образа qcow2.

Однако qcow2 строго необходим только для функции сохраняемости, которая записывает данные растрового изображения на диск после закрытия. Если настойчивость не требуется для конкретный вариант использования, все функции растрового изображения, кроме сохранения, доступны для любой произвольный формат изображения.

Например, грязные растровые изображения можно комбинировать с "необработанным" форматом изображения, но любые изменения растрового изображения будут отменены при выходе.

Предупреждение

Переходные растровые изображения не будут сохранены при выходе из QEMU! Стойкий растровые изображения доступны только для изображений qcow2.

Объекты Bitmap нуждаются в методе для ссылки на них в API. Все созданные API и управляемые растровые изображения имеют удобочитаемое имя, выбранное пользователем при создании время.

  • Имя растрового изображения уникально для узла, но точечные рисунки, прикрепленные к разным узлы могут иметь одно и то же имя. Таким образом, все растровые изображения адресуются через их пара (узел, имя).

  • Имя созданного пользователем растрового изображения не может быть пустым («»).

  • Временные растровые изображения могут иметь имена юникода JSON, которые фактически не длина ограничена.(Протокол QMP может ограничивать сообщения размером менее 64 МБ.)

  • Форматы постоянного хранения могут налагать собственные требования на имена битовых карт и пространства имен. В настоящее время только qcow2 поддерживает постоянные растровые изображения. Видеть docs / interop / qcow2.txt для получения дополнительных сведений об ограничениях. Примечательно:

  • QEMU иногда использует растровые изображения для внутреннего использования, у которых нет имени. Они есть скрыты от вызовов запросов API, не могут управляться внешним API, никогда не сохранялась и никогда не мигрировала.

Объекты Dirty Bitmap могут быть запрошены с помощью блока запроса команды QMP и видны через BlockDirtyInfo Структура QAPI.

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

  • запись : этот битовый массив записывает записи.

  • занято : этот битовый массив используется операцией.

  • постоянный : этот битовый массив является постоянным типом.

  • несогласованный : этот растровый рисунок поврежден и не может быть использован.

Статус + занято запрещает удаление, очистку или иное изменение растрового изображения, и происходит, когда растровое изображение используется для резервного копирования или находится в процессе загрузки из миграции. Многие из Команды, описанные ниже, откажутся работать с такими растровыми изображениями.

+ непоследовательный статус аналогично запрещает почти все операции, в частности, разрешена только операция block-dirty-bitmap-remove .

Существует также устаревшее поле status типа DirtyBitmapStatus. Растровое изображение исторически было пять видимых состояний:

  1. Заморожено : Это растровое изображение в настоящее время используется операцией и неизменный. Его нельзя удалить, переименовать, сбросить и т. Д.

    (сейчас это + занято .)

  2. Отключено : Этот битовый массив не записывает новые записи.

    (Сейчас это -запись-занято .)

  3. Активный : Этот битовый массив записывает новые записи.

    (Сейчас это + запись - занято .)

  4. Заблокировано : Это растровое изображение используется операцией и является неизменным. Отличие от «Frozen» заключалось прежде всего в деталях реализации.

    (сейчас это + занято .)

  5. Несогласованный : это постоянное растровое изображение не было сохранено на диск правильно, и больше не может использоваться.Остается в памяти служить индикатор отказа.

    (теперь это + непоследовательный .)

Эти состояния заменяются индикаторами состояния и не должны используемый. Разница между Frozen и Locked заключается в реализации подробности и не должны иметь отношения к внешним пользователям.

Основной интерфейс для управления растровыми объектами осуществляется через QMP. интерфейс. Если вы не знакомы, см. Docs / interop / qmp-intro.txt для широкого overview и qemu-qmp-ref для полной справки обо всех Команды QMP.

Поддерживаемые команды

Существует шесть основных команд API управления растровыми изображениями:

  • добавить грязный блок-битовый массив

  • удаление грязных битовых карт блоков

  • грязный блок-битовая карта-очистка

  • блокирование грязных битовых карт

  • включить блокировку грязных битовых карт

  • объединение грязных битовых карт блоков

И одна связанная команда запроса:

Создание: block-dirty-bitmap-add

добавление грязных битовых карт блока:

Создает новое растровое изображение, отслеживающее записи в указанный узел.гранулярность, постоянство и состояние записи можно настроить во время создания.

Пример

для создания нового, активно записывающего постоянного растрового изображения:

 -> {"выполнить": "добавить блок-грязное-битовое изображение",
     "arguments": {
       "узел": "drive0",
       "name": "bitmap0",
       "постоянный": правда,
     }
   }

<- {"возврат": {}}
 
  • Этот битовый массив будет иметь степень детализации по умолчанию, которая соответствует размеру кластера связанный с ним диск, если он доступен, ограничен размером [4 КиБ, 64 КБ].В текущее значение по умолчанию для qcow2 - 64 КБ.

Пример

Для создания нового отключенного ( - запись ) переходного растрового изображения, которое отслеживает изменения в сегментах по 32 КиБ:

 -> {"выполнить": "добавить блок-грязное-битовое изображение",
     "arguments": {
       "узел": "drive0",
       "name": "bitmap1",
       «гранулярность»: 32768,
       "disabled": true
     }
   }

<- {"возврат": {}}
 

Удаление: удаление грязного битового изображения блока

удалить грязное битовое изображение блока:

Удаляет растровое изображение.Растровые изображения, которые + заняты , не могут быть удалены.

  • Удаление растрового изображения не влияет на другие растровые изображения, прикрепленные к тому же node, и это не влияет на резервные копии, уже созданные из этого растрового изображения или узел.

  • Поскольку растровые изображения уникальны только для узла, к которому они прикреплены, вы здесь также необходимо указать имя узла / диска.

  • Удаление постоянного растрового изображения приведет к его удалению из файла qcow2.

Пример

Удалить растровое изображение с именем bitmap0 из узла drive0 :

 -> {"выполнить": "удалить грязное-битовое изображение блока",
     "arguments": {
       "узел": "drive0",
       "имя": "bitmap0"
     }
   }

<- {"возврат": {}}
 

Сброс: очистка блоков грязных битовых карт

грязный блок-битовый массив:

Удаляет все грязные биты из растрового изображения. + занято растровые изображения не могут быть очищены.

Пример

Очистить все грязные биты из растрового изображения bitmap0 на узле drive0 :

 -> {"выполнить": "очистить блок-грязный битовый массив",
     "arguments": {
       "узел": "drive0",
       "имя": "bitmap0"
     }
   }

<- {"возврат": {}}
 

Включение: блокирование грязных битовых карт

блок-грязный битмап-включить:

«Включает» растровое изображение, устанавливая бит записи в значение true, что приводит к записи в начать запись. + занято растровые изображения не могут быть включены.

  • Растровые изображения по умолчанию включаются при создании, если не настроено иное.

  • Постоянно включенные растровые изображения будут помнить свое состояние + запись на нагрузка.

Пример

Чтобы установить + запись на битовой карте bitmap0 на узле drive0 :

 -> {"выполнить": "включить блокировку грязного битового массива",
     "arguments": {
       "узел": "drive0",
       "имя": "bitmap0"
     }
   }

<- {"возврат": {}}
 

Включение: блокировать грязное битовое изображение-отключить

блокировка грязного битового массива:

«Отключает» растровое изображение, устанавливая бит записи в значение false, вызывая дальнейшее пишет, чтобы начать игнорирование. + занято растровые изображения не могут быть отключены.

Предупреждение

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

  • Отключение растрового изображения может быть полезно для проверки того, какие секторы диска изменен в течение определенного периода времени, или для явного управления окна дифференциального резервного копирования.

  • Постоянно отключенные растровые изображения будут помнить свое состояние -запись на нагрузка.

Пример

Чтобы установить -запись на битовой карте bitmap0 на узле drive0 :

 -> {"выполнить": "блокировать грязное битовое изображение",
     "arguments": {
       "узел": "drive0",
       "имя": "bitmap0"
     }
   }

<- {"возврат": {}}
 

Слияние, копирование: слияние блоков-грязных битовых карт

слияние грязных битовых карт блоков:

Объединяет одно или несколько растровых изображений в целевое растровое изображение.Для любого грязного сегмента в любом одном исходном растровом изображении целевое растровое изображение пометит этот сегмент как грязный.

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

  • При слиянии не создается целевое растровое изображение, если оно не существует. Пустой растровое изображение может быть создано заранее для достижения того же эффекта.

  • Место назначения не очищается перед объединением, поэтому последующее объединение операции будут продолжать кумулятивно отмечать больше сегментов как грязные.

  • Если операция слияния не удалась, битовая карта назначения гарантированно быть неизменным. Операция может завершиться ошибкой, если исходные или конечные растровые изображения заняты или имеют разную степень детализации.

  • Растровые изображения можно объединить только на одном узле. Есть только один «узел» аргумент, поэтому все растровые изображения должны быть прикреплены к тому же узлу.

  • Копирование может быть достигнуто путем слияния из одного источника с пустым пункт назначения.

Пример

Объединить данные из bitmap0 в bitmap new_bitmap на узле drive0 . Если new_bitmap был пустым до этой команды, это достигается копия.

 -> {"выполнить": "грязное-блок-битовое-слияние",
     "arguments": {
       "узел": "drive0",
       "target": "new_bitmap",
       "растровые изображения": ["bitmap0"]
     }
   }

<- {"возврат": {}}
 

Запрос: блок запроса

блок запроса:

Не совсем битовая команда, но вернет информацию о любых растровых изображениях. прикреплены к узлам, выступающим в качестве корневых для гостевых устройств.

Пример

Запросить подсистему блоков QEMU. Следующий json обрезал нерелевантные ключи из ответа, чтобы выделить только части, относящиеся к растровому изображению API. Этот результат выделяет растровое изображение bitmap0 , прикрепленное к корневому узлу устройство drive0 .

 -> {
     "выполнить": "блок запроса",
     "аргументы": {}
   }

<- {
     "возвращение": [ {
       "грязные-растровые изображения": [{
         «статус»: «активный»,
         "count": 0,
         "занято": ложь,
         "name": "bitmap0",
         "постоянный": ложь,
         "запись": правда,
         «гранулярность»: 65536
       }],
       "устройство": "диск0",
     }]
   }
 

Как указано в поддерживаемых форматах изображений, QEMU может сохранять растровые изображения в qcow2 файлы.Продемонстрировано в Creation: block-dirty-bitmap-add, передача persistent: true to block-dirty-bitmap-add сохранит это растровое изображение в диск.

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

Однако, если QEMU не имеет возможности полностью закрыть файл, растровое изображение будет помечен как + несогласованный при следующей загрузке и будет считаться небезопасным для использования для любой операции.На данный момент единственная допустимая операция с такими растровыми изображениями - это удаление грязных битовых карт блоков .

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

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

См. Транзакцию в справке QMP Больше подробностей.

Обоснование

Растровые изображения обычно можно изменить в любое время, но некоторые операции часто имеет смысл только в сочетании с другими командами. Когда виртуальная машина приостановлена, легко убедиться, что гостевая запись не происходит между отдельными QMP команды. Когда виртуальная машина работает, это сложно сделать с помощью отдельные команды QMP, которые могут разрешить гостевую запись между каждым команда.

Например, используя только отдельные команды QMP, мы могли бы:

  1. Загрузка виртуальной машины в приостановленном состоянии.

  2. Создайте полную резервную копию диска drive0.

  3. Создайте новое растровое изображение, прикрепленное к диску 0, будучи уверенным, что ничего не было записано на drive0 тем временем.

  4. Возобновить выполнение виртуальной машины.

  5. Позже создайте инкрементные резервные копии из bitmap0 .

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

Это не особенно полезно, если мы решим начать инкрементную резервные копии после того, как виртуальная машина проработала некоторое время, для чего мы хотели бы выполните следующие действия:

  1. Загрузите виртуальную машину и начните выполнение.

  2. С помощью одной транзакции выполните следующие операции:

  3. Позже создайте инкрементные резервные копии из bitmap0 .

Примечание

В качестве соображения, если bitmap0 создается до полного резервное копирование диска, инкрементные резервные копии все еще могут быть созданы с этого растровое изображение, но они будут копировать дополнительные сегменты, отражающие записи, которые произошла до операции резервного копирования.Сделки позволяют нам сузить критические точки во времени, чтобы сократить отходы, или, с другой стороны, направление, чтобы убедиться, что ни один сегмент не пропущен.

Поддерживаемые транзакции с растровыми изображениями

Использование этих команд идентично их соответствующим командам QMP, но см. разделы ниже для конкретных примеров.

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

«Модель выталкивания» здесь ссылается на тот факт, что QEMU «проталкивает» модифицированный блокирует до пункта назначения. Мы будем использовать QMP-команды drive-backup и blockdev-backup для создания обеих полные и инкрементные резервные копии.

Обе эти команды являются заданиями, у которых есть собственный QMP API для запросов и задокументировано в фоновых заданиях.

Пример: новая точка привязки добавочной резервной копии

Как указано в разделе «Транзакции - Обоснование», возможно, мы хотим создать новую цепочку инкрементных резервных копий, прикрепленную к диску.

В этом примере создается новая полная резервная копия диска «drive0» и сопровождается новое пустое растровое изображение, которое записывает записи с этого момента времени вперед.

Примечание

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

 -> {
     "выполнить": "транзакция",
     "arguments": {
       "действия": [
         {
           "тип": "добавить грязное-битовое изображение",
           "данные": {
             "узел": "drive0",
             "имя": "bitmap0"
           }
         },
         {
           "тип": "резервный диск",
           "данные": {
             "устройство": "диск0",
             "target": "/ путь / к / drive0.full.qcow2 ",
             "синхронизация": "полный",
             "формат": "qcow2"
           }
         }
       ]
     }
   }

<- {"возврат": {}}

<- {
     "timestamp": {
       «секунды»: 1555436945,
       «микросекунды»: 179620
     },
     "данные": {
       "статус": "создан",
       "id": "drive0"
     },
     "событие": "JOB_STATUS_CHANGE"
   }

...

<- {
     "отметка времени": {...},
     "данные": {
       "устройство": "диск0",
       "тип": "резервный",
       «скорость»: 0,
       "лен": 68719476736,
       "смещение": 68719476736
     },
     "событие": "BLOCK_JOB_COMPLETED"
   }

<- {
     "отметка времени": {...},
     "данные": {
       "статус": "завершено",
       "id": "drive0"
     },
     "событие": "JOB_STATUS_CHANGE"
   }

<- {
     "отметка времени": {...},
     "данные": {
       "статус": "ноль",
       "id": "drive0"
     },
     "событие": "JOB_STATUS_CHANGE"
   }
 

Полное объяснение семантики перехода задания и JOB_STATUS_CHANGE событие выходит за рамки этого документа и будет опущено во всех последующие примеры; выше для краткости опущено еще несколько событий.

Примечание

Последующие примеры будут опускать все события, кроме BLOCK_JOB_COMPLETED кроме случаев, когда это необходимо для иллюстрации различий в рабочих процессах.

Пропущенные события и объекты json будут представлены эллипсами: ...

Пример: сброс дополнительной точки привязки резервной копии

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

 -> {
     "выполнить": "транзакция",
     "arguments": {
       "действия": [
       {
         "тип": "грязный блок-растровое изображение-очистить",
         "данные": {
           "узел": "drive0",
           "имя": "bitmap0"
         }
       },
       {
         "тип": "резервный диск",
         "данные": {
           "устройство": "диск0",
           "target": "/ путь / к / drive0.new_full.qcow2 ",
           "синхронизация": "полный",
           "формат": "qcow2"
         }
       }
     ]
   }
 }

<- {"возврат": {}}

...

<- {
     "отметка времени": {...},
     "данные": {
       "устройство": "диск0",
       "тип": "резервный",
       «скорость»: 0,
       "лен": 68719476736,
       "смещение": 68719476736
     },
     "событие": "BLOCK_JOB_COMPLETED"
   }

...
 

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

Подсказка

В обоих этих примерах «bitmap0» концептуально привязан к создание новых полных резервных копий.Эти отношения не сохраняются или запомнился QEMU; уровень оператора или управления должен запомните, какие растровые изображения связаны с какими резервными копиями.

Пример: первая инкрементная резервная копия

  1. Создайте полную резервную копию и синхронизируйте ее с грязным растровым изображением любым способом:

    • Любой из двух методов резервного копирования, показанных выше,

    • Использование команд QMP с приостановленной виртуальной машиной, как в разделе «Обоснование», или

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

    Какой бы метод ни был выбран, предположим, что в конце этого шага:

    • Полная резервная копия называется drive0.full.qcow2 .

    • Созданное растровое изображение называется bitmap0 , оно подключено к drive0 .

  2. Создайте образ назначения для инкрементной резервной копии, использующей полная резервная копия в качестве резервного образа.

     $ qemu-img create -f qcow2 drive0.inc0.qcow2 \
      -b drive0.full.qcow2 -F qcow2
     
  3. Выполните команду инкрементного резервного копирования:

     -> {
         "выполнить": "диск-резервное копирование",
         "arguments": {
           "устройство": "диск0",
           "bitmap": "bitmap0",
           "цель": "drive0.inc0.qcow2",
           "формат": "qcow2",
           "синхронизация": "инкрементальный",
           "режим": "существующий"
         }
       }
    
    <- {"возврат": {}}
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
     

Копирует все блоки, измененные с момента создания полной резервной копии, в файл drive0.inc0.qcow2 . Во время операции отмечается bitmap0 + занято . Если операция прошла успешно, bitmap0 будет очищено до отражать «инкрементный» режим резервного копирования, при котором копируются только новые изменения из каждой инкрементной резервной копии.

Примечание

Любые новые записи, происходящие после начала операции резервного копирования, не скопировать в место назначения.«Момент времени» резервной копии - это когда резервное копирование начинается, а не когда заканчивается. Эти записи записываются в специальное растровое изображение, которое повторно добавляется в bitmap0, когда резервное копирование заканчивается, поэтому что следующая инкрементная резервная копия может их скопировать.

Пример: второе инкрементное резервное копирование

  1. Создайте новый образ назначения для инкрементной резервной копии, который указывает на предыдущий, например: drive0.inc1.qcow2

     $ qemu-img create -f qcow2 drive0.inc1.qcow2 \
      -b диск0.inc0.qcow2 -F qcow2
     
  2. Выполните новую команду инкрементного резервного копирования. Единственная разница здесь в том, что мы изменили целевое изображение ниже.

     -> {
         "выполнить": "диск-резервное копирование",
         "arguments": {
           "устройство": "диск0",
           "bitmap": "bitmap0",
           "цель": "drive0.inc1.qcow2",
           "формат": "qcow2",
           "синхронизация": "инкрементальный",
           "режим": "существующий"
         }
       }
    
    <- {"возврат": {}}
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
     

Поскольку первая инкрементная резервная копия из предыдущего примера завершена успешно, bitmap0 был синхронизирован с drive0.inc0.qcow2 . Вот, мы снова используем bitmap0 , чтобы создать новую инкрементную резервную копию, нацеленную на предыдущий, создавая цепочку из трех изображений:

Схема

 + ------------------- + + ------------------- + + ------ ------------- +
| drive0.full.qcow2 | <- | drive0.inc0.qcow2 | <- | drive0.inc1.qcow2 |
+ ------------------- + + ------------------- + + ------- ------------ +
 

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

На приведенной выше диаграмме ни drive0.inc1.qcow2, ни drive0.inc0.qcow2 не являются полные изображения сами по себе, но полагаться на их поддерживающую цепочку для восстановления полное изображение. Зависимость прекращается с каждым полным резервным копированием.

Каждая резервная копия в этой цепочке остается независимой и не изменяется новыми записями. сделано позже в цепочке. Например, drive0.inc0.qcow2 остается отлично действительная резервная копия диска, которая была на момент создания этой резервной копии.

Пример: инкрементное push-резервное копирование без резервного копирования файлов

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

  1. Создайте новый образ назначения без резервного файла.Нам нужно будет укажите размер базового изображения, потому что резервный файл не доступен QEMU для его определения.

     $ qemu-img create -f qcow2 drive0.inc2.qcow2 64G
     

    Примечание

    В качестве альтернативы вы можете опустить mode: "existing" из push команды резервного копирования, чтобы QEMU создавал образ без поддержки файл для вас, но вы теряете контроль над параметрами формата, такими как совместимость и предварительные настройки.

  2. Выполните новую команду инкрементного резервного копирования.Помимо нового направления image, отличий от двух последних примеров нет.

     -> {
         "выполнить": "диск-резервное копирование",
         "arguments": {
           "устройство": "диск0",
           "bitmap": "bitmap0",
           "цель": "drive0.inc2.qcow2",
           "формат": "qcow2",
           "синхронизация": "инкрементальный",
           "режим": "существующий"
         }
       }
    
    <- {"возврат": {}}
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
     

Единственное отличие с точки зрения пользователя состоит в том, что вам потребуется установить резервный образ при попытке восстановить резервную копию:

 $ qemu-img перебазировать drive0.inc2.qcow2 \
  -u -b drive0.inc1.qcow2
 

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

Также можно использовать --image-opts , чтобы указать всю поддержку цеплять вручную как эфемерное свойство во время выполнения, но это выходит за рамки объем этого документа.

Пример: инкрементное резервное копирование на несколько дисков

Предположим, у нас есть виртуальная машина с двумя дисками, «drive0» и «drive1», и мы хотим вернуть оба из них так, что две резервные копии представляют собой одну и ту же стойкую к сбоям момент времени.

  1. Для каждого диска создайте пустой образ:

     $ qemu-img create -f qcow2 drive0.full.qcow2 64G
    $ qemu-img create -f qcow2 drive1.full.qcow2 64G
     
  2. Создайте полную резервную копию (привязку) для каждого диска с соответствующими растровыми изображениями:

     -> {
         "выполнить": "транзакция",
         "arguments": {
           "действия": [
             {
               "тип": "добавить грязное-битовое изображение",
               "данные": {
                 "узел": "drive0",
                 "имя": "bitmap0"
               }
             },
             {
               "тип": "добавить грязное-битовое изображение",
               "данные": {
                 "узел": "диск1",
                 "имя": "bitmap0"
               }
             },
             {
               "тип": "резервный диск",
               "данные": {
                 "устройство": "диск0",
                 "target": "/ путь / к / drive0.full.qcow2 ",
                 "синхронизация": "полный",
                 "формат": "qcow2"
               }
             },
             {
               "тип": "резервный диск",
               "данные": {
                 "устройство": "диск1",
                 "target": "/path/to/drive1.full.qcow2",
                 "синхронизация": "полный",
                 "формат": "qcow2"
               }
             }
           ]
         }
       }
    
    <- {"возврат": {}}
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск1",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
     
  3. Позже создайте новые целевые образы для каждой инкрементной резервной копии которые указывают на их соответствующие полные резервные копии:

     $ qemu-img create -f qcow2 drive0.inc0.qcow2 \
      -b drive0.full.qcow2 -F qcow2
    $ qemu-img create -f qcow2 drive1.inc0.qcow2 \
      -b drive1.full.qcow2 -F qcow2
     
  4. Выпустить транзакцию инкрементного push-резервного копирования для нескольких дисков:

     -> {
         "выполнить": "транзакция",
         "arguments": {
           "действия": [
             {
               "тип": "резервный диск",
               "данные": {
                 "устройство": "диск0",
                 "bitmap": "bitmap0",
                 "формат": "qcow2",
                 "режим": "существующий",
                 "синхронизация": "инкрементальный",
                 "цель": "drive0.inc0.qcow2"
               }
             },
             {
               "тип": "резервный диск",
               "данные": {
                 "устройство": "диск1",
                 "bitmap": "bitmap0",
                 "формат": "qcow2",
                 "режим": "существующий",
                 "синхронизация": "инкрементальный",
                 "цель": "диск1.inc0.qcow2 "
               }
             },
           ]
         }
       }
    
    <- {"возврат": {}}
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск1",
           "тип": "резервный",
           «скорость»: 0,
           "лен": 68719476736,
           "смещение": 68719476736
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
    
    ...
     

В случае ошибки, которая возникает после успешного выполнения задания резервного копирования. запускается либо отдельной командой QMP, либо транзакцией QMP, пользователь получит событие BLOCK_JOB_COMPLETE с сообщением об ошибке, сопровождается событием BLOCK_JOB_ERROR .

В случае отмены задания пользователь получит BLOCK_JOB_CANCELLED вместо пары COMPLETE и ERROR События.

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

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

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

Пример: отдельные отказы

Задания инкрементального push-резервного копирования, которые не работают по отдельности, ведут себя просто как описано выше. Этот пример демонстрирует случай отказа одного задания:

  1. Создать целевое изображение:

     $ qemu-img create -f qcow2 drive0.inc0.qcow2 \
      -b drive0.full.qcow2 -F qcow2
     
  2. Попытка создать инкрементную резервную копию через QMP:

     -> {
         "выполнить": "диск-резервное копирование",
         "arguments": {
           "устройство": "диск0",
           "bitmap": "bitmap0",
           "target": "drive0.inc0.qcow2 ",
           "формат": "qcow2",
           "синхронизация": "инкрементальный",
           "режим": "существующий"
         }
       }
    
    <- {"возврат": {}}
     
  3. Получить пару событий, указывающих на сбой:

     <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "действие": "отчет",
           "операция": "запись"
         },
         "событие": "BLOCK_JOB_ERROR"
       }
    
    <- {
         "отметка времени": {...},
         "данные": {
           «скорость»: 0,
           "смещение": 0,
           «лен»: 67108864,
           "error": "На устройстве не осталось места",
           "устройство": "диск0",
           "тип": "резервный"
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
     
  4. Удалите неудачный образ и создайте его заново.

     $ rm drive0.inc0.qcow2
    $ qemu-img create -f qcow2 drive0.inc0.qcow2 \
      -b drive0.full.qcow2 -F qcow2
     
  5. Повторите команду после устранения основной проблемы, например освобождение места на резервном томе:

     -> {
         "выполнить": "диск-резервное копирование",
         "arguments": {
           "устройство": "диск0",
           "bitmap": "bitmap0",
           "цель": "drive0.inc0.qcow2",
           "формат": "qcow2",
           "синхронизация": "инкрементальный",
           "режим": "существующий"
         }
       }
    
    <- {"возврат": {}}
     
  6. Получить подтверждение об успешном завершении задания:

     <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           «лен»: 67108864,
           "смещение": 67108864
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
     

Пример: частичные сбои транзакций

команды QMP, такие как резервное копирование диска концептуально только запускает работу, поэтому транзакции, содержащие эти команды может быть успешным, даже если задание, созданное позже, не сработает. Это могло бы удивить взаимодействия с представлениями о том, как должна вести себя «транзакция».

Это различие означает, что иногда транзакция, содержащая такое задание запуск команд может показаться успешным и вернуть успех, но позже отдельные задания, связанные с транзакцией, могут потерпеть неудачу. Возможно, что приложению управления, возможно, придется иметь дело с частичным отказом резервного копирования после «успешная» транзакция.

Если в одной транзакции указано несколько заданий резервного копирования, если одно из них задания не удается, он никак не взаимодействует с другими заданиями резервного копирования по умолчанию.Успешное задание (задания) очистит грязное растровое изображение, связанное с операции, но не выполненные задания. Поэтому это небезопасно удалить все инкрементные резервные копии, которые были успешно созданы в этом сценарий, хотя другие не удалось.

В этом примере показана транзакция с двумя заданиями резервного копирования, одно из которых не выполняется. и один успешно:

  1. Выполните транзакцию, чтобы начать резервное копирование обоих дисков.

     -> {
         "выполнить": "транзакция",
         "arguments": {
           "действия": [
           {
             "тип": "резервный диск",
             "данные": {
               "устройство": "диск0",
               "bitmap": "bitmap0",
               "формат": "qcow2",
               "режим": "существующий",
               "синхронизация": "инкрементальный",
               "target": "drive0.inc0.qcow2 "
             }
           },
           {
             "тип": "резервный диск",
             "данные": {
               "устройство": "диск1",
               "bitmap": "bitmap0",
               "формат": "qcow2",
               "режим": "существующий",
               "синхронизация": "инкрементальный",
               "цель": "drive1.inc0.qcow2"
             }
           }]
         }
       }
     
  2. Получить уведомление о том, что транзакция была принята, и задания были запущен:

  3. Получить уведомление о завершении первого задания:

     <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           «лен»: 67108864,
           "смещение": 67108864
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
     
  4. Получить уведомление о сбое второго задания:

     <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск1",
           "действие": "отчет",
           "операция": "читать"
         },
         "событие": "BLOCK_JOB_ERROR"
       }
    
    ...
    
    <- {
         "отметка времени": {...},
         "данные": {
           «скорость»: 0,
           "смещение": 0,
           «лен»: 67108864,
           "error": "Ошибка ввода / вывода",
           "устройство": "диск1",
           "тип": "резервный"
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
     

В заключение приведенного выше примера drive0.inc0.qcow2 действителен и необходимо сохранить, но drive1.inc0.qcow2 является неполным и должен быть удалено. Если инкрементное резервное копирование всех дисков в определенный момент времени на уровне ВМ для создания новых резервных копий для обоих дисков необходимо будет сделать новые резервные копии с учетом учтите, что новая инкрементная резервная копия для drive0 должна быть основана на drive0.inc0.qcow2 .

В этом примере была создана инкрементная резервная копия для drive0 , но не для drive1 . Последняя резервная копия всей виртуальной машины, доступная в в этом случае полная резервная копия:

 [drive0.full.qcow2] <- [drive0.inc0.qcow2]
[drive1.full.qcow2]
 

Чтобы исправить это, создайте новую инкрементную резервную копию для обоих дисков. Результат будут цепочки резервных копий, похожие на следующие:

 [drive0.full.qcow2] <- [drive0.inc0.qcow2] <- [drive0.inc1.qcow2]
[drive1.full.qcow2] <-------------------------- [drive1.inc1.qcow2]
 

Пример: режим сгруппированного завершения

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

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

В режиме завершения сгруппированных ни одно задание не будет сообщать об успехе, пока все задания не будут готовы сообщить об успехе. Если какое-либо задание не удается, все остальные задания будут отменены.

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

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

  1. Выполнить транзакцию инкрементного резервного копирования для нескольких дисков:

     -> {
         "выполнить": "транзакция",
         "arguments": {
           "properties": {
             "режим завершения": "сгруппированы"
           },
           "действия": [
           {
             "тип": "резервный диск",
             "данные": {
               "устройство": "диск0",
               "bitmap": "bitmap0",
               "формат": "qcow2",
               "режим": "существующий",
               "синхронизация": "инкрементальный",
               "target": "drive0.inc0.qcow2 "
             }
           },
           {
             "тип": "резервный диск",
             "данные": {
               "устройство": "диск1",
               "bitmap": "bitmap0",
               "формат": "qcow2",
               "режим": "существующий",
               "синхронизация": "инкрементальный",
               "цель": "drive1.inc0.qcow2"
             }
           }]
         }
       }
     
  2. Получить уведомление о том, что транзакция была принята и задания были запущены:

  3. Получить уведомление о том, что задание резервного копирования для drive1 завершилось неудачно:

     <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск1",
           "действие": "отчет",
           "операция": "читать"
         },
         "событие": "BLOCK_JOB_ERROR"
       }
    
    <- {
         "отметка времени": {...},
         "данные": {
           «скорость»: 0,
           "смещение": 0,
           «лен»: 67108864,
           "error": "Ошибка ввода / вывода",
           "устройство": "диск1",
           "тип": "резервный"
         },
         "событие": "BLOCK_JOB_COMPLETED"
       }
     
  4. Получить уведомление о том, что задание для drive0 было отменено:

     <- {
         "отметка времени": {...},
         "данные": {
           "устройство": "диск0",
           "тип": "резервный",
           «скорость»: 0,
           «лен»: 67108864,
           "смещение": 16777216
         },
         "событие": "BLOCK_JOB_CANCELLED"
       }
     

По завершении этого примера оба задания были прерваны из-за неудача. Оба целевых изображения должны быть удалены и больше не используются.

Транзакцию в целом можно просто перевыпустить позже.

Zilogic Systems | Создание растровых изображений GLCD с использованием GIMP

Маленькие растровые изображения можно легко создать вручную.Но для большего изображения, было бы лучше, если бы был редактор растровых изображений. Есть здесь нужно учитывать две вещи:

Инструмент редактирования

Инструмент редактирования изображений с открытым исходным кодом, GIMP, может быть используется для самых разных целей редактирования изображений, включая редактирование 1-битные изображения. GIMP можно получить на http://www.gimp.org.

Формат файла

Инструмент редактирования должен сохранить файл в удобном формате. для использования в нашей программе. Формат файла XBM - это формат, используемый система X Window для хранения курсора мыши и другого растрового изображения картинки.Лучшая часть формата XBM заключается в том, что он хранит растровое изображение как Массив C, точно такой, как требует gfx_blit_bmp ()!

Шаги по созданию растрового файла 16x16 с помощью GIMP показаны ниже.

Шаг 1

Запустите GIMP и выберите Файл > Новый . В создайте новый образ В диалоговом окне укажите ширину 16 и высоту 16. Щелкните OK .

Рисунок 1. Новое изображение

Шаг 2

В окне изображения установите уровень масштабирования 800% , чтобы изображение было проще редактировать пиксель за пикселем.

Рис. 2. Уровень масштабирования

Шаг 3

В меню View включите Show Grid . Это отобразит сетку, чтобы каждый пиксель был хорошо виден. Это снова помогает при редактировании отдельные пиксели.

Рисунок 3. Показать сетку

Шаги 4 и 5

Выберите инструмент Pencil в окне инструментов. Выберите кисть размером 1 пиксель из параметров инструмента Pencil . В этой конфигурации Pencil инструмент позволяет изменять отдельные пиксели.

Рис. 4. Карандаш Инструмент

Рисунок 5. 1 пиксель Кисть

Step 6

Нарисуйте растровое изображение с помощью инструмента Pencil . Цвет можно переключить между черным и белым, щелкнув значок переключателя в окне инструментов.

Рисунок 6. Переключение цвета

Рисунок 7. Растровое изображение

Step 7

Сохраните изображение с расширением .xbm. Откройте файл .xbm в в вашем редакторе вы должны увидеть массив C, содержащий данные растрового изображения.

 #define check_width 16
#define check_height 16
статический беззнаковый символ check_bits [] = {
   0xff, 0xff, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x19, 0x98, 0x31, 0x8c,
   0x61, 0x86, 0xc1, 0x83, 0x81, 0x81, 0xc1, 0x83, 0x61, 0x86, 0x31, 0x8c,
   0x19, 0x98, 0x01, 0x80, 0x01, 0x80, 0xff, 0xff};
 

Шаг 8

Скопируйте массив C в свою программу и передайте его gfx_blit_bmp ().

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *