Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

Уменьшение изображения   Найти похожие ветки 

 
TImage1   (2006-08-18 22:41) [0]

Подскажите алгоритм уменьшения картинки, а то есть один, но что то он не устраивает, хотелось бы получше качество.


 
Ketmar ©   (2006-08-18 22:43) [1]

Graphics32.


 
TImage1   (2006-08-18 22:47) [2]

>Ketmar ©   (18.08.06 22:43) [1]
библиотека? Хотелось бы все же алгоритм, очень не хочется связываться со сторонними компонентами.


 
Дураг   (2006-08-18 22:54) [3]

canvas.StretchDraw


 
TImage1   (2006-08-18 23:04) [4]

>Дураг   (18.08.06 22:54) [3]
хы, не это не пойдет естественно :))))


 
Zeqfreed ©   (2006-08-18 23:12) [5]

http://www.google.com/search?client=opera&rls=en&q=image+resampling&sourceid=opera&ie=utf-8&oe=utf-8


 
Ketmar ©   (2006-08-18 23:23) [6]

> [2] TImage1   (18.08.06 22:47)
зачем делать колесо? там GPL-код.


 
guav ©   (2006-08-18 23:29) [7]

> >Дураг   (18.08.06 22:54) [3]
> хы, не это не пойдет естественно :))))

Почему ?
У StretchBlt 4 варианта, может просто не тот, что в данном случае нужен установлен ?


 
palva ©   (2006-08-18 23:39) [8]

Алгоритм реализует повторную интерполяцию. Самый совершенный алгоритм это бикубическая интерполяция. Его стараются использовать, когда картинку надо увеличивать.

Исходная картинка представляет собой раскрашенные пиксели. Центры пикселей можно представить себе точками. Эти точки образуют прямоугольную сетку. Новая картинка ляжет на эту же сетку, но новые пиксели будут располагаться реже и будут вообще говоря попадать где-то между точками старой картинки. Каждый новую точку надо раскрасить в зависимости от цветов старых пикселей.

Если бы новая точка располагалась на горизонтальной линии сетки, то можно было бы взять две точки слева и две точки справа и построить по ним кубический многочлен. Значение этого многочлена в новой точке и будет новым цветом (если изображение цветное, то нужно эту интерполяцию повторить три раза). Но вообще говоря новая точка лежит между линиями сетки, поэтому поступим так: проведем через эту точку горизонтальную прямую линию до перечечения с двумя вертикальными линиями сетки слева и двумя справа. В этих четырех точках надо определить цвета используя старые точки, лежащие на одной горизонтальной линии -  две сверху и две снизу - тоже используем кубическую интерполяцию. Таким образом в определении цвета новой точки участвует 16 старых точек.

Алгоритм можно упростить, если использовать линейную интерполяцию. Тогда в определение цвета одной новой точки будет вовлечено четыре старых точки. Еще проще - это взять цвет ближайшей старой точки. При уменьшении картинки даже такой примитивный алгоритм будет давать приемлемый результат.


 
Anatoly Podgoretsky ©   (2006-08-19 00:04) [9]

TImage1   (18.08.06 22:41)  
До одного пикселя.


 
TImage1   (2006-08-19 01:45) [10]

>Anatoly Podgoretsky ©   (19.08.06 00:04) [9]
)))))))))))))))
>palva ©   (18.08.06 23:39) [8]
Теория это конечно хорошо, но в моем случае писать собственный алгоритм есть не разумная трата времени.
Люди может у кого завалялся исходник, или поделитесь своим опытом, кто сталкивался с подобной задачей.


 
Ketmar ©   (2006-08-19 02:32) [11]

> [10] TImage1   (19.08.06 01:45)
тяжело быть альтернативно развитым, да? ладно, я повторю: Graphics32.


 
TImage1   (2006-08-19 03:19) [12]

Ketmar ©   (19.08.06 02:32) [11]
Это библиотека??? В смысле компонент/набор компонентов, я повторюсь, использование сторонних компонентов не желательно, не люблю я это все дело. Можно конечно выдернуть от туда алгоритм, посмотрю конечно (и то если с исходниками), но все же возможно у кого то есть алгоритм. Вообще если честно пока не смотрел что за зверь этот Graphics32, в любом случае спасибо за желание помочь.


 
OSokin ©   (2006-08-19 09:44) [13]

Вот мой метод:
Вычисляется, во сколько раз уменьшается изображение по осям XY, проходится по изображению в цикле, берем цвет пикселя, находящегося на позиции, равно i * sX (где i - каунтер в цикле, sX - во сколько раз уменьшается) и так же по оси Y и ставим значение этого пискеля в новый, уменьшенный, рисунок. Если хочется покрасивше, то можно заморочится с соседними пикселями. Но StretchDraw все-таки быстрее :)


 
Ketmar ©   (2006-08-19 13:20) [14]

> [12] TImage1   (19.08.06 03:19)
ты бы это... почитал, что ли, [6] и пнул гугль. заняло бы времени примерно столько же, сколько написание поста, а вопрос бы сняло сразу.
а если тебе просто пообщаться -- то так и говори. мы тут потрепаться всегда готовы. %-)


 
Ketmar ©   (2006-08-19 13:21) [15]

> [13] OSokin ©   (19.08.06 09:44)
Graphics32 быстрее StreatchDraw. %-)


 
Dib@zol   (2006-08-19 15:13) [16]

А ваще, чё бы не попробовать OpenGL? Там ведь билинейная фильтрация!


 
palva ©   (2006-08-19 18:02) [17]


> TImage1   (19.08.06 01:45) [10]
> >palva ©   (18.08.06 23:39) [8]
> Теория это конечно хорошо, но в моем случае писать собственный
> алгоритм есть не разумная трата времени.

Вы же писали:

> TImage1   (18.08.06 22:47) [2]
> библиотека? Хотелось бы все же алгоритм, очень не хочется
> связываться со сторонними компонентами.

Я думал, вы собираетесь писать программу. А если нет, тогда непонятно, в чем ваши затруднения.


 
TImage1   (2006-08-20 02:38) [18]

ну я же на готовый рассчитывал :)))))) Просто самому писать для данного случая считаю неоправданным, вполне сойдет какой нибудь готовый алгоритм. Просто нет не времени на это, много и так чего писать приходится. А тут сестра попросила програму фотки цифровая пережимать, что бы по инету друзьям посылать. Ну вот выходные я и сел ей написал, только вот выходные и так короткие, а если еще алгоритм разрабатывать. Это в теории все быстро и легко, а на практике возится придется, то тормозить будет, то качества не добиться, в общем как то так :)
Да я тут дернул с инета пару алгоритмов но они не многим лучше strechdraw :)


 
Vendict ©   (2006-08-20 12:55) [19]

TImage1   (20.08.06 2:38) [18]
А тут сестра попросила програму фотки цифровая пережимать, что бы по инету друзьям посылать.


А может научить сестру фотошопом или аналогичным ПО пользоваться ?


 
Virgo_Style ©   (2006-08-20 13:14) [20]

Vendict ©   (20.08.06 12:55) [19]
фотошопом


IrfanView хватит выше крыши %-)


 
Ketmar ©   (2006-08-20 13:48) [21]

ясно. кисо убойное, хочет само не знает чего. а мы тут стараемся незнамо зачем...


 
Vendict ©   (2006-08-20 18:48) [22]

Virgo_Style ©   (20.08.06 13:14) [20]
IrfanView хватит выше крыши %-)

ну я же написал:
Vendict ©   (20.08.06 12:55) [19]
или аналогичным ПО

Ketmar ©   (20.08.06 13:48) [21]
))


 
programania ©   (2006-08-20 22:09) [23]

Исходный текст Delphi5 уменьшения разными способами
http://programania.com/stretch.zip   55кб


 
TImage1   (2006-08-20 23:08) [24]

programania ©   (20.08.06 22:09) [23]
Вот само то, спасибо большое.

Ketmar ©   (20.08.06 13:48) [21]
А правда ли ты старался? )))))))))))))))))))))


 
palva ©   (2006-08-20 23:39) [25]

> Ketmar ©   (20.08.06 13:48) [21]
> А правда ли ты старался?

Было сказано: МЫ старались.
Все ясно. Тебе нужна была программа, а ты упорно просил алгоритм. Слово, наверно, красивое... И здесь опять:
> вполне сойдет какой нибудь готовый алгоритм


 
TImage1   (2006-08-21 00:54) [26]

palva ©   (20.08.06 23:39) [25]
Да какая программа??? Просто если хочется пофлудить, ну я не против же. А так есть алгоритм, значит есть, нет значит нет. Вот programania ©  дал как раз то что и нужно было. А кто что там помогал я не знаю, спасибо конечно, но я вообще то не помощи просил, а АЛГОРИТМ если у кого есть. Причем писать его я не просил, попросил поделиться.
Хотя если для дела нужно, что бы я сказал что меня раскусили, то я скажу что ты меня раскусил, что мне то… нетрудно  ))))))))))))))))))))0


 
TImage1   (2006-08-21 01:00) [27]

Хы я понял, некоторые люди усиленно помогают мне осознать что я не знаю что мне надо )))))))))))))))))))
Кстати программ подобных масса, но я почему решил ей написать сам, вот такой я извращенец. :)))))))



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

Форум: "Прочее";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.06 c
15-1155727986
Иксик
2006-08-16 15:33
2006.09.10
Сон


3-1151485479
Бульбаш
2006-06-28 13:04
2006.09.10
Переполнение стека


2-1155725809
Mikka Hakkinnen
2006-08-16 14:56
2006.09.10
Нужно динамически создать/удалить несколько Series.


15-1155541283
dimonf
2006-08-14 11:41
2006.09.10
Господа, ктонить подключал комп через s-video к TV?


15-1156072441
BOA_KAA
2006-08-20 15:14
2006.09.10
Интересный конкурс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский