Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Масштабирование изображений низкоуровневыми средствами

38K
05 сентября 2008 года
svalvz
7 / / 20.08.2008
Посколько в наши дни 99,999999999% программистов ведут все свои разработки под Windows, нынче стало не сыскать информации о программном выражении алгоритмов масштабирования изображения без обилия средств предоставляемых Windows. Пишу графическую библиотеку на Turbo Pascal 7.0, а здесь нету всемогущего WinAPI. Я представляю себе что надо ширину изображения представленную в пискелях условно разбить на две части и отсчитать количество пикселей на которые должна уменьшиться ширина изображения при масштабировании в более мелкий формат и затем поочерёдно удалять каждый второй пиксель из изображения. Реализация моего алгоритма на QBasic'ке принесла потрясающие результаты. Во вложении сам пример и исходник. Но вот проблема с увеличением изображения при масштабировании. Конечно, вставлять каждый второй пиксель равный по цвету случайно выбранному левому или правому пикселю от него можно сделать если бы не одно "но" - изображение может потребоваться увеличивать постепенно, скажем, на один пиксель в ширину и высоту. Тогда как быть? Ведь процедура увеличения если ей каждый раз подсовывать рисунок вставляет пискель сначала слева а потом справа, потом снова слева и справа до тех пор пока ширина и высота не будут соответствовать затребованным, но при этом левая сторона изображения будет расти в то время как правая останется неизменной. Как быть? Пожалуйста посоветуйте! Я математику не знаю, в школе не учился, так что не пинайте строго, пожалуйста!
1.9K
06 сентября 2008 года
andriano
474 / / 10.01.2008
Алгоритм уменьшения изображения с пропуском части пикселей - неправильный.
Скажем, черная сетка толщиной в 1 пиксель превратится в сетку с непостоянным шагом, а то и вовсе линии сетки исчезнут, когда по идее должны просто из черных превратиться в менее яркие - серые.
Надо не выкидывать пиксели, а находить средний цвет по нескольким смежным и именно его помещать в уменьшенное изображение.
По поводу увеличения - алгоритмов существует масса, и до сих пор разрабатываются (и финансируются, к слову сказать) новые. Так что надеяться в течение недели-двух написать хороший алгоритм - утопия.
Начать лучше всего с билинейной интерполяции (в английской кальке - билинейная фильтрация), после чего перейти на бикубическую, ну а дальше, если возникнет желание, целенаправленно искать в И-нете алгоритмы, осуществляющие желаемое. Например, на gamedev.ru был опубликован любопытный алгоритм, названный его автором SmartFiltering, если не ошибаюсь, который по-разному обрабатывал плавные и резкие изменения цвета.

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

PPS. Кстати, под Windows пишут не 99.99...% программистов, а менее 90%.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог