![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Народ у меня такая проблема: в FAQ нашел текст программы масштабирования изображения с помощью интерполяции, но там написано что данный алгоритм подходит только для увеличения изображения! Но это не совсем так, если коэффициенты dx и dy задать меньше 1, то алгоритм будет уменьшать изображение, но при dx и dy меньше 0.5 он работает корректно, а при dx и dy в пределах от 0.5 до 1 кое-где появляются пиксели "левого" цвета!
Посьба у меня такая, подскажите пожалуйста как переделать алгоритм чтобы он работал корректно при любых dx и dy, а если это невозможно то подскажите другой гибкий алгоритм по уменьшению изображения!(Только без испрользования Stretch, или объединения по 4 пикселя) Вот текст алгоритма:
|
|||
|
||||
Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Dmi-Afonin, ты читал правила форума???
Там было такое: "Нельзя задавать один и тот-же вопрос на двух сайтах" На сколько мне помнится то по этому адресу: http://forum.sources.ru/index.php?showtopic=70506, у тебя уже есть вопрос. Это сообщение отредактировал(а) Zero - 31.10.2004, 19:44 |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
обычно делают так:
предполагают, что коэффициент - рациональное число (а других в компьютерах, обычно, и не бывает ![]() растягивают изображение в n раз, а потом сжимают в m а вот для растяжения и сжатия есть уже два варианта: 1. пользоваться только теми пикселами, которые уже есть 2. вычислять значения новых пикселов по какому-то алгоритму второй вариант может (и чаще всего) приводит к появлению пикселов "левых" цветов, хотя обычно их цвет находится где-то между цветами соседних (при сжатии можно заменять средним цветом, при растяжении - интерполировать), такой алгоритм может немного сгладить резкие переходы (что не всегда хорошо, например, для компьютерной графики типа всяких диаграмм, текстов) первый вариант просто копирует пиксели нужное количество раз при растяжении и прореживает рисунок при сжатии, новых значений пикселов не появляется, но при этом плавные переходы могут немного испортиться (это не очень хорошо проявит себя на естественных изображениях) --- на самом деле если не требуется очень высокое качество, лучше выбрать второй алгоритм, т.к. он проще. а алгоритм простой (к примеру k=0.7) 1. представляем коэффициент в виде 7/10 2. растягиваем рисунок в 10 раз (копируем каждый пиксель 100 раз) 3. сжимаем в 7 раз - берем каждый 7-ой пиксель по горизонтали и по вертикали если рисунки маленькие или памяти куча, на этом можно остановиться если нет, можно немного соптимизировать: проводить сжатие и растяжение одновременно: например, для строки:
что-то в этом роде... не проверял... original - строка исходного изображения result - строка, куда будет записан результат m,n - представление k в виде дроби (если разложить на целые, быстрее будет) width - длина строки -------------------- qqq |
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Dmi-Afonin: у меня была та же проблема, но я её решил, вот исходник конечного результата:
Width, Height - ширина и высота исходного куска из S с начальной точкой в (х,у), Rect - кусок, куда он будет преобразован в D.
А как же скорость работы???? зачем стягивать и растягивать, если можно сразу сделать необходимое действие... Тем более тут используется не линейное преобразование, а это: "result[c]:=original[c*n/m];" - вроде как простое линейное преобразование... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Удалено модератором... Высказывайся по-культурнее...
На том сайте мне ничего не подсказали толкового. А остальным больше спосибо, сейчас буду пробовать. Это сообщение отредактировал(а) p0s0l - 31.10.2004, 18:57 |
|||
|
||||
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Illusion Dolphin будь другом напиши пожалуйста, что за идентификатор Math, и как задавать Rect или скинь на мыло полный исходник [email protected]. Заранее благодарен!!!
|
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
это точное указание модуля, откуда брать эту функцию.
Rect задаётся очень просто: Rect(x1,y1,x2,x2), где (x1,y1) - начальная точка, (x2,y2) - конечная точка. P.S. А ругаться не нужно, это тоже записано в правилах форума ![]() -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Illusion Dolphin огромное спасибо сейчас попробую!
|
|||
|
||||
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Illusion Dolphin Что то у меня никак не получается вот исходный текст посмотри пожалуйста, что не так!!!
|
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Вот пример использования:
P.S. я наверное неправильно сказал параметры - первые параметры это куда это спроецировать на D то, что находится в Rect S. Добавлено @ 19:19 ты ещё спрашивал как сделать это рабочим при любых коэффициентах... то, что я дал - это только для увеличения, для уменьшения юзай эту, параметры у енё точно те же (для совместимости)
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Еще раз спасибо тебе Illusion Dolphin ты мне очень помог.
Это сообщение отредактировал(а) p0s0l - 31.10.2004, 19:48 |
|||
|
||||
Dmi-Afonin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 31.10.2004 Репутация: нет Всего: нет |
Ура народ у меня всё получилось!!! Всем огромное спасибо, особенно Illusion Dolphin. Ты меня очень выручил.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |