Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2013, 03:55   #1
KriatonuS
Новичок
Джуниор
 
Регистрация: 01.06.2013
Сообщений: 1
По умолчанию Копирование части PNG файла в другой с учетом альфа канала

Суть такова: Использую pngimage. Есть 4 png файла. Задний фон, средний план, движимый объект и передний план. Все работает с учетом даже альфы:
...
png_fon.Canvas.Draw(0,0,png_fon_r);
png_fon.Canvas.Draw(0,0,png_srednii _plan);
Png_fon.Canvas.Draw(x,y,png_figura) ;
Png_fon.Canvas.Draw(0,0,png_peredni i_plan);
Form1.Canvas.CopyRect(BufferOn,png_ fon.Canvas,BufferOff);
...
Но! Понимаю, что для увеличения скорости сработки, правильнее копировать прямоугольную область всех слоев, размером движимого объекта и выводить в нужном месте. CopyRect работает, но отсекает Альфу. На чистом битмапе не хочу. Кто подскажет, как заменить CopyRect для PNG с альфой. Буду очень благодарен за код. Мой движок работает и так, но медленно и неудобно анимированные объекты записывать в разные файлы.


Хочу добавить: использую Delphi 7, верстаю дизайн 2D игры прямо в фоточтобе, за что и люблю PNG. Очень нужна помощь, ибо не программер а дизайнер.

Последний раз редактировалось KriatonuS; 01.06.2013 в 04:03. Причина: Уточнение
KriatonuS вне форума Ответить с цитированием
Старый 02.06.2013, 05:12   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Что дизайнер по нику заметно ). Не могу быть целиком и полностью уверен в ответе, ибо с альфа-каналом не пробовал эту функцию, но попробуй использовать BitBlt.
Пример использования и описание:
Код:
BitBlt(Form1.Canvas.Handle,x+i,y+i,x+100+i,y+i+100,
BM.Canvas.Handle, const_x , const_y ,SRCCOPY)
Эта функция копирует (если последний параметр равен SRCCOPY) растровую область из источника в приемник. Она может не просто копировать, но и инвертировать цвета, копировать маски, но должны стоять другие значения.
Параметры этой функции:
1) дескриптор приемника (Handle) типа HDC;
2) координата Х левого верхнего угла области, в которую копируем;
3) тоже самое, только для Y;
4) размер области приемника по Х;
5) размер области приемника по Y;
6) дескриптор источника (Handle) типа HDC;
7) координата Х левого верхнего угла области, из которой копируем;
8) тоже самое, только для Y;
9) код растровой операции.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
копирование данных из одного файла в другой kos987123 Microsoft Office Excel 3 11.09.2012 14:13
Копирование к строк из одного файла в другой A_Orlov Помощь студентам 1 15.06.2010 14:49
Копирование данных из одного файла в другой! vipcrash Microsoft Office Excel 17 23.01.2010 21:11
Выделение и копирование части документа на основе структуры файла satyr_of_frost Microsoft Office Word 23 12.02.2009 09:15
Отрисовка PNG с альфа-каналом на десктопе Whisper Помощь студентам 2 02.01.2008 19:24