Первая анимация

Xakep, номер #045, стр. 045-063-3


value:=B or (G shl 5) or (R shl 11);

(G shl 5) - сдвигаем переменную G на пять бит влево;

(R shl 11) - сдвигаем R на 11 бит влево.

Результаты складываются между собой и переменной B с помощью операции логического сложения or.

Прямая запись в видеопамять

Теперь о том, как записывать в память. Чтобы записать значение цвета в левый верхний угол, нужно присвоить его по адресу, указанному в desc.lpSurface, то есть вот сюда - PWord(Integer(desc.lpSurface))^ . Я привожу указатель к типу PWord, потому что записывать буду значение типа Word. Если бы я записывал только байт, то приводил бы к PByte - PByte(Integer(desc.lpSurface))^ .

Чтобы вычислить строку, в которую надо записать, я умножаю значение Y на длину строки - Y * desc.lPitch. В desc.lPitch как раз и находится длина строки картинки. Чтобы вычислить Х позицию, я умножаю Х на 2, потому что каждое значение Х позиции состоит из 2 байт.

Ну и, наконец, в этой процедуре FImageSurface - это поверхность типа IDirectDrawSurface7, в которую я загружу картинку. Именно эту поверхность я блокирую и получаю к ней доступ.

Disconnect

Я считаю, что с появлением диска журнал получил второе дыхание. Я каждый месяц совместно с редактором стараюсь найти что-то интересное и полезное для любого кодера и разместить на диске. Помимо этого я выкладываю и исходники примеров для тех, у кого проблемы с Инетом.

Сегодня я не буду рассматривать в статье пример, чтобы не загружать лишнее место, а просто выложу его на диск с подробными комментариями и дополнительной информацией/описанием. Ну а те, кому не достанется журнал с диском, могут всегда обратиться на мой сайт www.cydsoft.com/vr-online и найти все необходимое в разделе "Хакер". Удачи!!!

P.S.У меня к тебе просьба, на сто баксов :). Не пиши мне большие письма. После появления рубрики "Кодинг" меня каждый день валят вопросами. Я не в состоянии всем рассказывать то, о чем пишут книги. Я могу что-то подсказать, где-то помочь, но не больше. А просьбы типа помоги написать прогу вообще нереальны. Я отвечаю только на те вопросы, где ответ займет несколько строчек. Целые лекции по мылу я разводить не могу. Я бы с удовольствием помог всем, но это НЕВОЗМОЖНО. Вас слишком много, а я один :(((. Поэтому лучше разбей свой вопрос на несколько маленьких и спрашивай постепенно, а не все сразу.

Ты спрашивал

<???>Извините меня за беспокойство, но у меня есть к Вам один вопрос. Вот Вы написали статью про простой сканер ресурсов на Delphi, а не могли бы Вы помочь мне его разработать на C++ Builder 5.0, просто очень надо.

Н: Во-первых, прошу всех называть меня на ТЫ, я еще слишком молод :). Во-вторых, не надо извиняться, я всегда готов помочь в ответе на небольшие письма. Ну а теперь собственно сам ответ:

C++ Builder и Delphi это практически одно и то же. В обоих используется одна библиотека VCL, и C++ Builder даже понимает и умеет компилировать код Delphi. А перенос не так сложен, пиши то же самое, просто что и в моих примерах, только заменяй:

Назад на стр. 045-063-2  Содержание  Вперед на стр. 045-063-4