Бит блит - Bit blit

Битовый блит (также обозначаемый как BITBLT , BIT BLT , BitBLT , Bit BLT , Bit Blt и т. Д. , Что означает передачу битового блока ) - это операция с данными, обычно используемая в компьютерной графике, в которой несколько растровых изображений объединяются в одно с использованием логической функции .

Операция включает по крайней мере два растровых изображения, одно источник и место назначения, возможно, третье, которое часто называют «маской», а иногда четвертое используется для создания шаблона . Пиксели каждого объединяются поразрядно в соответствии с указанной растровой операцией (ROP), и результат затем записывается в место назначения. ROP по сути является булевой формулой. Самый очевидный ROP перезаписывает место назначения источником. Другие ROP могут включать операции AND , OR , XOR и NOT . Графический чипсет Commodore Amiga (и другие) мог комбинировать три исходных растровых изображения, используя любую из 256 возможных булевых функций с тремя входами.

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

Происхождение

Название происходит от подпрограммы BitBLT для компьютера Xerox Alto , что означает передачу блока с граничными битами . Дэн Ингаллс , Ларри Теслер , Боб Спроул и Дайана Мерри запрограммировали эту операцию в Xerox PARC в ноябре 1975 года для системы Smalltalk-72 . Позже Дэн Ингаллс реализовал переработанную версию в микрокоде .

Развитие быстрых методов для различных операций побитового преобразования дало импульс эволюции компьютерных дисплеев от использования символьной графики к использованию растровой графики для всего. Машины, которые в значительной степени зависят от производительности 2D-графики (например, игровые приставки ), часто имеют специальную схему, называемую блиттером .

Пример реализации маскированного блита

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

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

Изображение на заднем плане Спрайт (слева) и маска (справа)
Blit back.png XBlit dot.png

Для этого спрайт рисуется в разных положениях над изображением:

Ожидаемый результат
XBlit final.png

Техника

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

В первом блите маска переносится на фон с помощью растрового оператора AND . Поскольку любое значение AND с 0 равняется 0, а любое значение AND с 1 не изменяется, черные области создаются там, где будут появляться фактические спрайты, а остальная часть фона остается в покое.

Результат первого блита
XBlit и.png

Во втором блите спрайт переносится на недавно измененный фон с использованием растрового оператора OR . Поскольку любое значение, объединенное с помощью логической операции ИЛИ 0, не изменяется, фон не изменяется, а черные области заполняются фактическим изображением спрайта.

Конечный результат
XBlit final.png

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

Блиттинг против аппаратных спрайтов

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

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

Ссылки

внешние ссылки