Постепенно
Эта статья в значительной степени или полностью опирается на один источник . ( декабрь 2017 г. ) |
Битовый блит (также пишется 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 с ограниченной пропускной способностью в старых компьютерных системах.
Однако есть несколько способов оптимизировать это. Если большие области экрана заняты узорами, возможно, будет более эффективно дублировать фон на экране, а не стирать каждый узор по отдельности. Вариант предполагает разделение экрана на сегменты и стирание только тех сегментов, на которых были нарисованы узоры. Этот метод известен как грязные прямоугольники.
См. также
[ редактировать ]- Альфа-композитинг
- Маска (вычислительная) , здесь использована как трафарет.
- Блеск
Ссылки
[ редактировать ]- ^ Jump up to: а б Санчес, Хулио; Мария П. Кантон (2007). «Отображение растровых изображений» . Программные решения для инженеров и ученых . ЦРК Пресс. п. 690.
- ^ «Фреймбуфер — OpenGL Wiki» . www.khronos.org . Проверено 23 июня 2020 г.
Операция блитирования — это особая форма операции копирования; он копирует прямоугольную область пикселей из одного кадрового буфера в другой. Эта функция также имеет некоторые очень специфические свойства в отношении мультисэмплинга.