Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите плз с конкретным применением DirectX, нужно просто вывести в окно 
:(
    Опции темы
Ibragim
Дата 12.10.2004, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



День добрый.
Помогите плз тремя строчками кода на DelphiX - что-то никак не заладилось

Есть массив на 3Mb типа MyArray: array[1..3000000] of byte;
Есть переменная StartAdress: word;

Нужно в моем окне на экране сделать следующее.
Заполнить окно серыми прямоугольничками размером с обычный текстовый символ разного оттенка.
Оттенки берутся из массива MyArray[StartAdress], MyArray[StartAdress + 1], и т.д. 0 - самый светлый, 1- потемнее и т.д.
То есть прямоугольничек в верхнем левом углу окна имеет закраску интенсивности MyArray[StartAdress], следующий - MyAdress[StartAdress + 1] и т.д.

Помогите кто чем может.
PS Своего кода не привел, ибо не придумал - он у меня только по точкам может заполнять, а начальник сказал - по квадратикам!

Спасибо за внимание.
PM MAIL   Вверх
Kesh
Дата 12.10.2004, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 1
Всего: 54



Ну давай подумаем вместе... smile.gif
Во-первых... Интенсивность на мой взгляд надо бы поменять... Пусть будет 0 - самый темный... 255 - самый светлый... Зачем, потом объясню...

Т.к. Режим графический, то для разного размера шрифта размер прямоугольничка будет разный... А если шрифт не моноширинный, то и для каждого символа ширина будет отличаться...
Пусть она будет 8х16 пикселей...

Теперь объявим константы...

Код
var
 SW: integer = 8;
 SH: integer=16;


Рисовать мы будем прямо на канве... Т.к. хранить спрайты для прямоугольников неохота... Это, конечно, медленнее, нос хлебом попрет... smile.gif

Теперь разберем преобразование цветов...

Код
var
 PixFormat : TDIBPixelFormat;
Код
if DXDraw.Display.BitCount=16
   then PixFormat := MakeDIBPixelFormat(5,6,5)
   else PixFormat := MakeDIBPixelFormat(8,8,8);

Если экран 16 бит на пиксель, то маска RGB - (5,6,5), иначе - (8,8,8)...

Вопрос на засыпку... Сколько прямоугольничков будет по вертикали и горизонтали?..
Код
var
NW,NH: integer;

...

NH :=   DXDraw.SurfaceHeight div SH;
NW :=   DXDraw.SurfaceWidth div SW;


Для того, чтобы нарисовать прямоугольник надо просто сделать так...
Код
DXDraw.Surface.FillRect(Rect((i mod NW) * SW, (i div NW) * SH, ((i mod NW) + 1) * SW,((i div NW) + 1) * SH), pfRGB(PixFormat,MyArray[StartAdress+i],MyArray[StartAdress+i],MyArray[StartAdress+i]));

А там просто по циклу
Код
for i := 0 to N do ...


Извини, сейчас подробнее не могу... спать охота... Могут быть ошибки, т.к. на момент написания Delphi под рукой не было... Если что пиши... Помогу обязательно...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.