![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убрать зазубринки при поворе растра? [D7]
Б © (2009-01-10 22:13:00)Как убрать зазубринки при поворе растра?
P.S. Такого сдесь не нашёл.
KilkennyCat (2009-01-12 07:35:00) [1]Удалено модератором
Германн (2009-01-12 02:17:00) [2]Удалено модератором
antonn (2009-01-11 22:25:00) [3]
> Б (11.01.09 09:48) [7]
рекомендую вообще выбрать другой форум, тут обычно не ты спрашиваешь, а тебя много спрашивают и говорят что ты должен делать еще до того, как ты опишешь проблему.
Про суперсемплинг - ну довольно хорошо исчезают (мне х2 мало, обычно делаю х4), правда скорость медленная (относительно) и память тратится. В разделе Мультимедия когда то homm давал пример довольно быстрого уменьшения картинки (в 2 и в 4 раза), можно его как нибудь примастрячить.
Sapersky (2009-01-11 17:44:00) [4]Поворот растра делается операцией вида DstPixel[x, y] := SrcPixel[sx, sy], при этом sx и sy высчитываются по формулам с использованием синусов-косинусов. Проблема в том, что синусы-косинусы - непрерывны (дробные), а исходная картинка - дискретна (индексы должны быть целыми), при округлении индексов имеем потерю точности и как результат зазубринки. Чтобы уменьшить потерю точности, можно использовать, например, линейную интерполяцию по 4-м пикселям, т.е. высчитываем из 4-х соседних пикселей некий "средний" на основе дробной части sx и sy.
Примерно так:
ix: = Trunc(sx); iy: = Trunc(sy); // целая часть индекса
kx: = Frac(sx); ky: = Frac(sy); // дробная
px1: = SrcPixel[ix, iy] * (1 - kx) + SrcPixel[ix + 1, iy] * kx; // среднее по горизонтали от верхних двух пикселей
px2: = SrcPixel[ix, iy+1] * (1 - kx) + SrcPixel[ix + 1, iy+1] * kx; // от нижних
DstPixel[x, y] := px1 * (1 - ky) + px2 * ky; // среднее по вертикали
В продвинутых библиотеках все расчёты делаются в целых числах (дробные расчёты эмулируются целыми, т.н. fixed point), поэтому получается более-менее приличная скорость. Например см. FastLIB -> FastFX.pas -> Transform.
DFT (2009-01-11 16:58:00) [5]поищите в web про anti-aliasing (один из видов размытия изображения, тема довольно обширная)
Б (2009-01-11 09:48:00) [6]> Ты про какие "зазубринки"?
При вращении растра всегда неизбежно возникают зазубринки.
Покрути растр в Фотошопе и увидишь.
> Про поворот какого растра?
И что много таких? 24-разрядные интересуют.
Да и вопрос можной приминить к любому.
> Про какое "размытие"?
Да любое! Которое подходит.
> Тут и сам вопрос сформулирован плохо.
Чё не понятного? Что тут можно ВООБЩЕ добавить? А?
Распиши тогда как Я должен был его сформулировать.
Вот antonnпонял.
> про поворот вообще ничего не сказано.
А зачем? Суть то не в этом. ЕЩЁ РАЗ ПОВТОРЯЮ ПРИ ЛЮБОМ ПОВОРОТЕ ВОЗНИКАЮТ ЗАЗУБРИНКИ. Не крутил растры вообще что ли?
> Сдесь.
В Media вопрос выбросили.
И что эта за монера отвечать по подобию?
KilkennyCat (2009-01-11 03:07:00) [7]
> Про поворот какого растра?
про поворот вообще ничего не сказано. Сдесь.
Германн (2009-01-11 02:07:00) [8]
> Б (10.01.09 23:48) [2]
>
> 2 antonn
> И что, реально пропадают? И как сильно. :)
>
> Б (10.01.09 23:50) [3]
>
> Может есть какие-нибудь нормальные методы размытия что ли?
>
Ты про какие "зазубринки"? Про поворот какого растра? Про какое "размытие"? Говори точнее.
Вот тут я (если бы был модератором) уж точно прекратил обсуждение! Вот тут модератор был бы абсолютно прав. Тут и сам вопрос сформулирован плохо (но в "Начинающим" это как бы допустимо. О чём ясно и недвусмыслено заявлено в "Основной"). Но и на уточняющие вопросы был дан бессмысленный ответ.
Amoeba (2009-01-11 00:26:00) [9]Посмотри библиотеку Graphics32.
Б (2009-01-10 23:50:00) [10]Может есть какие-нибудь нормальные методы размытия что ли?
Б (2009-01-10 23:48:00) [11]2 antonn
И что, реально пропадают? И как сильно. :)
antonn (2009-01-10 22:59:00) [12]перед поворотом увеличь его и место его нанесения (раза в 2-4), поверни, потом обратно уменьшь :) Конечно ресурсоемко получится