Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.05.2011, 21:37
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию Вывод битмапа частями

Пытаюсь вывести битмап таким образом:



но уже совсем запутался с какого бока лучше подойти. Подскажите, какие у кого есть идеи.
Ответить с цитированием
  #2  
Старый 18.05.2011, 21:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

У тебя же цвета чередуются.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 18.05.2011, 22:15
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цвета только показывают последовательность вывода. Грубо говоря, "рубим" картинку на квадратики, скажем 32х32, и выводим диагональными линиями.
Ответить с цитированием
  #4  
Старый 19.05.2011, 01:39
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Обход какой:
диагональ 1: i = 0; j = 0;
диагональ 2: i = 1; j = 0;| i = 0; j = 1;
диагональ 3: i = 2; j = 0;| i = 1; j = 1;| i = 0; j = 2;
диагональ 4: i = 3; j = 0;| i = 2; j = 1;| i = 1; j = 2;| i = 0; j = 3;
Т.е. уменьшается номер картинки "по длине" и одновременно увеличивается "по высоте". Вот и проходим таким образом, вырезаем нужные кусочки изображения и рисуем. Так до конца ширины.
Потом идем по высоте, I ставится равным ширине и уменьшается, J увеличивается.
Первая часть так:
Код:
a:=0;
while a<w do
begin
j:=0;
 for i:=a downto 0 do
 begin
   // выводим кусок картинки
   inc(j);
 end;
inc(a);
end;
А можно J не юзать, просто писать везде "A-I".

Со второй, думаю, разберетесь =)
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 19.05.2011 в 01:49.
Ответить с цитированием
  #5  
Старый 19.05.2011, 21:24
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Спасибо, всё получилось. С учётом того, что функция BitBlt дуракоустойчива, нет смысла что-либо добавлять ещё к приведённому примеру, меняем только строку
while a<w на while a<w+h.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025