Zoom, Help!
От: Eugeny Россия http://eugeny.com
Дата: 16.04.01 17:15
Оценка:
Люди помогите с хорошим алгоритмом zoom'а (в моем случае 1-битовое изображение).
Если можно с исходником. Спасибо
Евгений, britva@nm.ru
Евгений, http://eugeny.com
Re: Zoom, Help!
От: asv  
Дата: 20.04.01 09:48
Оценка:
Здравствуйте Eugeny, 16.04.2001 11:15:09 вы писали:

>Люди помогите с хорошим алгоритмом zoom'а (в моем случае 1-битовое изображение).

По-хорошему это делается так:
1. Берется картинка-результат
2. Для каждой точки ищется соотв. точка в исходной картинке. Если коэф. зуммирования <=1 — это один пиксел, иначе — некоторая область, в этом случае берем ее центральный пиксел.
3. Далее — в зависимости от требуемой скороти и качества: можно просто взять цвет этого пиксела и перенести его на новую картинку, а можно определить маску коэфициентов, типа:
010
121
010
и перемножить цвета пикселей из исходной области с коэфициентами (центр маски совпадает с центром области), а затем найти среднее значение (в случае, если картинка многоцветная — разложить цвет на компоненты и проделать это для каждой). Размер маски может зависеть от размера исходной области. Можно, конечно, сделать ее просто единичной, но так лучше отображаются мелкие детали. Увеличив коэфициенты в столбце — подчеркнешь вертикальные линии на рез. картинке, ну и т.п.

>Если можно с исходником

Сорри, без исходника
Re[2]: Zoom, Help!
От: vovkos Россия https://ioninja.com
Дата: 03.05.01 09:42
Оценка:
>2. Для каждой точки ищется соотв. точка в исходной картинке.

Сорри за навязчивость, это наверно все знают, но все равно напишу :)
Поиск соотв. точки можно осуществлять без чисел с плавающей запятой.
Вообще в случаях, когда float'ы вылазят от деления одного целого на другое,
(а именно этот случай и рассматриваем) существует способ реализовать все
на целых числах (кажись называется алгоритм Брезенхейма, но я не уверен)
Если на пальцах, то надо складывать числители получающихся дробей отдельно,
вообще не производя делений.
Допустим нам надо поставить в соответвие:
x1 меняется 0..width1-1 и x2 меняется 0..width2-1.
вводим переменную t — в ней будем накапливать числители.

x1 = 0 x2 = 0 t = 0

while (x1 < width1)
{
x1++;
t += width2;
while (t > width1)
{
t -= width1;
x2++;
}
}

наглядно и понятно.
конечно по хорошему надо без внутреннего while-а, просто ввести еще две целочисленные переменные — m = целая часть от деления width2 на width1, и n = m * width1 и вместо
внутреннего while поставить
t -= n;
x2 += m;

все :)

Удачи!
Re: Zoom, Help!
От: Иван Бобыльков  
Дата: 18.05.01 05:43
Оценка:
Здравствуйте Eugeny, вы писали:

E>Люди помогите с хорошим алгоритмом zoom'а (в моем случае 1-битовое изображение).

E>Если можно с исходником. Спасибо
E>Евгений, britva@nm.ru

Вот Вам исходники с комментариями.
http://src.fitkursk.ru/d/c/graph/bmscaler.zip
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.