Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Альфа-наложение.

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

Альфа-наложение относится к числу новых возможностей, появившихся в Windows 98 и Windows 2000. Вся поддержка состоит из одной структуры и одной функции.

                        typedef struct _BLENDFUNCTION {

                                    BYTE BlendOp;

                                   BYTE BlendFlags;

BYTE SouyrceConstantAlpha;

BYTE AlphaFormat;

                        } BLENDFUNCTION;

BOOL AlphaBlend(HDC hdcDesk, int nXOriginDest,int nYOriginDesk,

                               int nWidthDest, int nHeightDest,

                               HDC hdcSrc, int nXOriginSrc int nYOriginSrc,

                               int nWidthSrc, int nHeightSrc,

                               BLENDFUNCTION blendFDunction);

Как вы сами уже, наверное, поняли, это их API – прототип. Потом я покажу, как это при помощи MFC написать. А теперь разберемся с параметрами. Для начала возьмем структуру. Поле BlendOp должно быть AC_SRC_OVER. Поле BlendFlags – 0. Поле SouyrceConstantAlpha может быть от 0 до 255, в зависимости от прозрачности. Поле AlphaFormat может быть 0, при постоянном альфа-коэффиценте, а может быть AC_SRC_ALPHA. Но мы рассмотрим только первый вариант. Теперь время пришло и для самой функции. Первые 5 параметров определяют контекст устройства и прямоугольник приемной поверхности. Прошу обратить внимание: 3 и 4 параметры это не координата, а расстояние от первой точки, которая задается 2 и 3 параметрами. Следующие 5 параметров определяют контекст устройства источника и прямоугольник. Прошу опять-таки обратить внимание на 9 и 10 параметры. И последний параметр – структура BLENDFUNCTION.

            А теперь пример:

                        CclientDC dc(this);

                        CBrush b(RGB(0,255,255));

                        dc.SelectObject(b);

                        dc.Rectangle(0,0,100,100);

                        BLENDFUNCTION blend={AC_SRC_OVER,0,255/2,0};

                        dc.AlphaBlend(100,100,100,100,&dc,0,0,100,100,blend);

            Этот пример написан с использованием MFC. Он просто рисует квадрат (0,0,100,100), а потом этот же квадрат рисуется от 100,100 до 200,200, но уже полупрозрачным. Я думаю, смысл вам понятен. Можно было бы нарисовать еще один квадрат и потом с помощью альфа-наложения изобразить их, чтобы один из них перекрывал другого. Тогда будут видны оба прямоугольника. Но в этом не главная прелесть альфа-наложения. Если выводить в одно и тоже место какую-то фигуру, допустим с коэффициентом  a равным 50, то через 5-6 выводов будет полностью непрозрачная фигура. Так можно реализовать эффект постепенного появления, что выглядит довольно эффектно. Но я думаю, вы сами с этим разберетесь, ведь это не такая сложная тема (всего же 1 функция).

Левин Антон 2002-06-07

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS