Прежде всего, давайте раскроем скобки в приведенной выше формуле и сгруппируем величины, умножаемые на alpha. В результате получится следующий вариант формулы:
Z[i,j] = (X[i,j3,- Y[i,j]} * alpha + Y[i,j]
Преимущество этого варианта записи в том, что на каждом шаге вычислений вместо двух умножений выполняется одно.
Теперь о значениях alpha. Величины x[i,j], Y[i, j] и z[i, j] являются кодами базовых цветов точек изображений, поэтому их значения заключены в пределах от 0 до 255 (или от о до OFFh). Умножать такие величины на дроби неудобно, поэтому при программной реализации значения alpha задаются в виде целых чисел, изменяющихся в пределах от 0 до 255, а результат умножения делится на 256. Фактически деление на 256 не требуется, достаточно просто использовать старший байт произведения. При таком представлении граничными значениями aipha будут 0 и 255/256 = 0,9961, но с учетом реальной точности вычислений отличие верхнего предела от 1 не имеет существенного значения.
Давайте упростим задачу и рассмотрим частный случай, когда z = у и изображение z находится на экране, а коды его точек, соответственно, в видеопамяти. Это позволит нам рассмотреть простой вариант подпрограммы, которая вместо смешения изображений, хранящихся в двух файлах, выполняет наложение изображения, хранящегося в файле, на изображение, находящееся на экране. Текст подпрограммы, выполняющей наложение строки формата bgr на строку, расположенную в видеопамяти, приведен в примере 7.30, предполагается, что установлен видеорежим True Color.
Входные параметры задаются так же, как для всех описанных подпрограмм построения строки (drawline):
Как обычно, должно быть установлено окно видеопамяти, а регистр es должен содержать код видеосегмента.
Значение alpha может изменяться от 0 до 255, оно указывается в одноименной переменной, имеющей размер слова, ее надо описать в разделе данных задачи, присвоив конкретное значение, или предусмотреть возможность ввода этого значения перед наложением рисунка.