stringtranslate.com

Бит блит

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

В операции участвуют как минимум два растровых изображения: «источник» (или «передний план») и «назначение» (или «фон») и, возможно, третий, который часто называют «маской » . Результат может быть записан в четвертое растровое изображение, хотя часто оно заменяет место назначения. Пиксели каждого из них объединяются с помощью выбираемой программой растровой операции — побитовой логической формулы. Наиболее очевидная растровая операция перезаписывает место назначения источником. Другие могут включать операции AND , OR , XOR и NOT . [1] Графический набор микросхем Commodore Amiga (и другие) мог комбинировать три исходных растровых изображения, используя любую из 256 возможных логических функций с 3 входами .

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

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

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

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

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

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

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

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

Техника

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

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

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

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

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

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

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

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

Смотрите также

Рекомендации

  1. ^ Аб Санчес, Хулио; Мария П. Кантон (2007). «Отображение растровых изображений». Программные решения для инженеров и ученых . ЦРК Пресс. п. 690.
  2. ^ "Фреймбуфер - OpenGL Wiki" . www.khronos.org . Проверено 23 июня 2020 г. Операция блитирования — это особая форма операции копирования; он копирует прямоугольную область пикселей из одного фреймбуфера в другой. Эта функция также имеет некоторые очень специфические свойства в отношении мультисэмплинга.

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