Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

Алгоритм качественного уменьшения рисунка   Найти похожие ветки 

 
sco ©   (2006-02-10 16:08) [0]

Извините за банальный вопрос, который где только не рассматривался, но мой "треугольный мозг, - как выражается одна моя знакомая - это не понял". Перепробовал 3 алгоритма, из них 2 не отладил, а 1 заработал, вот только слово "качественный" к нему никак не подходит. А мне то нужно чтобы в Image загрузить рисунок 1280-960(это в среднем) и "КРАСИВО" отмаштабировать в допустимые формой размеры(при разных разрешениях разные размеры). Грузит вроде нормально но вот маштабирует плохо, у меня слайдшоу картин, и мне естественно очень важно "красиво" показывать рисунки. А то шикарные картины просто теряют вид.
 В яндексе я всё проискал, что нашёл либо не подошло, либо не заработало. Гугл не для меня, проблемы с английским. Где ещё искать не знаю. Мож у кого-нидь есть ссылки,алгоритмы,функции?


 
Jeer ©   (2006-02-10 16:50) [1]

В таком случае имеет смысл поискать готовое:
-FastLib


 
misha_gr   (2006-02-11 17:58) [2]

О, только сегодня подсказали ))) Цитирую:

TImage.Picture.Graphic конвертируем в TBitmap (думаю сам догадаешься).
Далее, битмап представляет собой двумерный массив
значений цветов, типа rgb[x1][y1] чтоб ресайзнуть его до rgb[x2][y2] надо сделать промежуточную матрицу rgb[XNOK][YNOK] XNOK YNOK - наименьшие общие кратные x1, x2 и y1,y2 соотв.
Далее практически очевидно - идет ресемплирование конечного пикселя по маленьким кусочкам этой большой матрицы.
Пример приведу, матрица 10 на 10 чтоб сделать из нее 7 на 7, делается матрица 70 на 70, в которой один оригинальный пиксель = это кусочек 7 на 7. а потом из 70х70 последовательно берутся кусочки 10х10, выссчитывются их средние значения цветов, и получается в конце пересчитанная 7х7.
Если влом считать нок - можно тупо перемножать, но можно потерть в памяти места раз в 4-16.


 
misha_gr   (2006-02-11 20:14) [3]

Только что реализовал... при преобразовании картинки 517*600
к 862*1000 результирующая матрица превышает 2GB, соответственно, память под такой массифчик не выделяется. Непосредственно в лоб решать таким образом задачку нельзя. Но в общем, идея понятна. Как реализую - отпишу )))


 
antonn ©   (2006-02-11 20:53) [4]

misha_gr   (11.02.06 20:14) [3]
Непосредственно в лоб решать таким образом задачку нельзя

нужно с DIB данными работать непосредственно:)


 
vrem   (2006-02-11 21:33) [5]

1. прямое преобразование фурье(можно быстрое)
2. отбрасывание "лишних" частот
3. обратное преобразование фурье(тоже можно быстрое)

пример -
есть 1024 точки. надо 512 точек
делаем прямое быстрое преобразование фурье(т.к. 1024 это степень двойки) - получается разложение на 512 частот. половину частот(высоких) выбрасываем, остаётся 256 низких частот.
делаем обратное быстрое преобразование фурье, получаем 512 точек как и требуется


 
Fenik ©   (2006-02-12 02:17) [6]

http://torry.net/vcl/graphics/bitmap/resample.zip



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.061 c
6-1143200723
-FX-
2006-03-24 14:45
2006.08.06
хитрый Proxy редактирующий трафик. Это реально?


2-1152294963
4IZH
2006-07-07 21:56
2006.08.06
как в DLL узнать хендел формы


4-1145014299
Sinka
2006-04-14 15:31
2006.08.06
Задний фон на TCustomObject (в частности на TTreeView)


15-1152267147
sniknik
2006-07-07 14:12
2006.08.06
Как все похоже... хотя вроде бы про другое ;) (возможно баян!!!)


2-1153316894
fast2
2006-07-19 17:48
2006.08.06
Не подключается ADOQuery