Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Четверг, 16.05.2024, 06:56
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Графика

Загрузка отдельной части большого изображения с помошью CopyRect
             Загрузка отдельной части большого изображения с помошью CopyRect



При создании игры. ВОзникла необходимость загружать не всю часть изображения (картинки), а лишь малую частичку. В моем случае кадры анимации персонажа были обьединены в одну картинку. А программа должна была брать нужную часть анимации, с правильными координатами на картинке, и загружать в переменную типа TBitmap;


В Delphi присутсвует много вариантов как загрузить не все изображение, а лишь его часть, но у каждого метода свои особенности. Например я, варианты с OpenGL и DirectX откинул в сторону, так как не хочу использовать дополнительные библиотеки. Плюс мой сайт посвящен созданию игр именно новичками. А изучение данных библиотек довольно сложно для них.


Перебрав много вариантов я выбрал вариант с Canvas.CopyRect. Далее приводится пример реализации алгоритма, который загружает в переменную IMG1 все изображение с кадрами анимации, а затем в переменную IMG2, мы загружаем лишь необходимое нам с Вами.



Исходный Код:


  IMG1:=TBitmap.Create;
  IMG2:=TBitmap.Create;
  IMG2.Width:=64;
  IMG2.Height:=64;
  IMG1.LoadFromFile('1.bmp');
  IMG2.Canvas.CopyRect( Rect(0, 0, 64, 64), IMG1.Canvas, Rect(0,0,64,64));
  form1.Canvas.Draw(0,0,IMG2);



Обратите внимание! В моем случае обязательно нужно было указать размеры для переменной IMG2. Без указания размеров изображение не выводилось на экран. Так что учтите это при создании своего алгоритма.

Теперь рассмотрим вариант, когда нам нужна первая картинка в первой строке. Картинки анимации были у меня размером 64х64.


Исходный код:


Form1.Canvas.CopyRect( Rect(0, 0, 64, 64), IMG2.Canvas, Rect(0,0,64,64));

 
Теперь рассмотрим вариант, когда нам нужна вторая картинка в первой строке:


Form1.Canvas.CopyRect( Rect(64, 0, 128, 64), IMG1.Canvas, Rect(64,0,128,64));



или


Form1.Canvas.CopyRect( Rect(0, 0, 64, 64), IMG1.Canvas, Rect(64,0,128,64));


Ну и на последок рассмотрим вариант, когда нужно изображение первой картинки во второй строке


Form1.Canvas.CopyRect( Rect(0, 0, 64, 64), IMG1.Canvas, Rect(0,64,64,128));



Думаю данных примеров будет достаточно для того, чтобы разобраться с выбором правильных координат при загрузке нужной части большого изображения.


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




Источник: delgame.at.ua
Категория: Графика | Добавил: Armageddets (05.08.2013) | Автор: Загрузка отдельной части большого и
Просмотров: 1299 | Теги: несколько картинок в одной, часть большого изображения, копирование части картинки, CopyRect, Delphi | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 103
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0