![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Нужно быстро перевести одну картинку в другую, т.е. сделать плавный переход. Если использовать scanline, то получается всё же не настолько быстро, насколько хотелось бы, и если брать 2 картинки 600х800, 24 бита, то очень сильно тратятся системные ресурсы и всё притормащивает... Насколько я понимаю, то это можно сделать при помощи DirectX, но я не знаю, как обращаться с этим "объектом"... Можете дать небольшой примерчик как преобразовывать и выводить с помощью его графику?
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: нет Всего: 22 |
Illusion Dolphin, через scanline тоже можно сделать быстро. просто делай не для каждого пиксела подряд, а со случайным шагом, т.е. чтобы за один проход у тебя менялось, скажем, 10 % случайно выбранных пикселей, а последним, десятым, шагом просто тупо присваивай одну картинку другой.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
x77:
Это не гарантирует, что через 10 шагов вся картинка перейдёт в другую... Получится очень хорошо видимый шум, чтобы избавляться придётся как минимум создавать ещё одну карту, в которой придётся поменчать "использованые" пикселы, но тогда работа межет быть ещё медленнее, чем простым перебором Это сообщение отредактировал(а) Illusion Dolphin - 9.5.2004, 16:06 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| DriveSoftware |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 17.3.2003 Репутация: нет Всего: 4 |
||||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
1. scanline
2. Алгоритм перевода картинки - такой. R0 - нач. значение красной составляющей цвета. R1 - кон. значение красной составляющей цвета. for i := 0 to 9 do begin R := R0 + (R1-R0)*Sin(360/10*i*Pi/180); G := G0 + (G1-G0)*Sin(360/10*i*Pi/180); B := B0 + (B1-B0)*Sin(360/10*i*Pi/180); end; Либо так - по синусу. Либо линейно (ну, сам разберёшься). |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
dm9, Большое спасибо за разнообразные способы работы со scanline...
DriveSoftware, тоже спасибо, это аналог... Но! Со scanline я работать умею хорошо, вся проблема с тем, что всё-таки это занимает достаточно много системных ресурсов, даже если использовать простые линейные алгоритмы, не говоря уже о синусах (для этого случая я даже строил массивы значений синуса - намного быстрее получается И, видя как быстро всё продумывает компьютер в 3-D играх, сразу волей-неволей хочется научится пользоваться именно DirectX, т.к. он использует ещё и аппаратные возможности (если не ошибаюсь), в связи с чем хочется работать не со scanline, а с DirectX... Есть у кого-нибудь пример? Перевод одного изображения в другое - это как минимальный пример, который бы хотелось увидеть... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Да, задачка не так проста оказалась
Вот маскимум что я и ещё один человек смогли совместно сделать. На Атлоне 2200 работает зашибись, а на Селероне 433 подтормаживает... заметны переходы. Кто сделает быстрее? Хотелось бы посмотреть...
PS Синус ни при чём. Линейно делал - работает так же. Это сообщение отредактировал(а) dm9 - 9.5.2004, 21:34 |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
dm9, у меня код очень сильно в первом приближении напоминает твой, даже слишком... Я выводил 25 кадров в секунду (640х480) с такой помошью, переводя один в другой плавно и при этом добавляя специально шум, девиацию яркости и другие прелести (код привести могу, но он немного великоват и трудет для чтения)... Получается даже очень хорошо, но на быстрых машинах, но посмотришь на кваку - выводит и рассчитывает такое, что диву даёшься... Тут есть две основные загвоздки: Tcanvas.Draw - работает не настолько быстро, как хотелось бы... DirectX вроде пишет сразу в видеокарточку обходя многие излишества... Второе - вычисление пикселей нового битмапа - "L[k ] := L1[k ] + (L2[k ] - L1[k ]) * F div NNN;" (пусть даже shr 15) - лучше всё это переложить на видеокарточку, хоть это... Так что вопрос всё равно открыт, пусть даже в виде
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 3 Всего: 137 |
Думаю, что основная проблема не в выводе Canvas.Draw, а всё-таки именно в вычислениях, так как при увеличении частоты процессора всё ОК... а вот как их ускорить - хз.
Добавлено @ 21:44 Хотя этот ещё вопрос... может, и вывод тормозит. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
To Illusion Dolphin:
Отсылаю небольшие статейки по DirectX & OpenGL, может что интересное найдешь. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |