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

Вниз

Антиалистинг, сглаживание линий, как осуществить, исходники!   Найти похожие ветки 

 
NarvaL   (2004-03-28 20:39) [0]

Народ!!! помогите осуществить сглаживание обычной прямой нарисованой либо в Tpaint либо в Timage ... без разницы, лишь бы сглаживала!!!!!

ЛЮБЫМИ СПОСОБАМИ!!! Как бы это садистски и мазохистски не оказывалось!

З.Ы.: Просьба без глупых высказываний типа - "что это такое" или "мне нужен весь код чтобы это понят"

Кода нет, сам ещё не знаю даже как бы это осуществить!!! Может кто сталкивался!!!

НО НУЖНО!!!!!!!!!!


 
Mihey ©   (2004-03-28 21:21) [1]

http://freespace.virgin.net/hugo.elias/graphics/x_wuline.htm


 
Dmyk   (2004-03-28 22:03) [2]

Сглаживание уже нарисованной прямой осуществляется так же, как и сглаживание всего остального: проходимся по рисунке и усредняем значения всех соседних пикселей.
Если же надо нарисовать сглаженную прямую, то тут чего-то есть: http://algolist.manual.ru/graphics/painting/line.php .


 
NarvaL   (2004-03-29 15:43) [3]


> Dmyk   (28.03.04 22:03) [2]
> Сглаживание уже нарисованной прямой осуществляется так же,
> как и сглаживание всего остального: проходимся по рисунке
> и усредняем значения всех соседних пикселей.


А можно с этого места по подробее!!! я ведь с цветовой схемой ещё не работал.. есть пример программы.. которая бы сканила и усредняла значение???? или вообще как это организовать можно???

Кажися то, что нужно!!!


 
Dmyk   (2004-03-29 20:08) [4]

Нууу... Если кратко, то примерно так:
Проходим в цикле все точки. Берём значения интенсивности красного для точки и 8-ми точек вокруг неё, слаживаем и делим на 9 (количество точек). Это и есть интенсивность красного в сглаженном рисунке. Аналогично повторяем для интенсивности синего цвета и зелёного цвета.
Единственное что - надо делать попровку для крайних пикселей (для точки с правой строны доступно только 6 вокруглежащих точек, а для точки в правом-верхнем углу доступны только 4 точки).

Вот небольшой пример:
(псевдокод, на практике не поверял, очень тормознут из-за Canvas.Pixels. Ещё не сгладит крайние точки рисунка ((0,0), (0,1), (1,1), (1,0)) и подобные - для них надо отдельно писать). В реальных условиях лучше скопировать исходные данные в один большой массив (обращие к массиву происходит быстрее, чем обращение к Canvas.Pixels) и рисовать на нём. А для вывода лучше использовать Scanline.)

{FBmp - рисунок с прямой, которую надо сгладить. Сглаженная прямая рисуется в FNewBitmap. Оба должны уже быть созданы!}
var
 i, j: Integer;
 r, g, b: Byte;
begin
 FNewBitmap.Height := FBmp.Height;
 FNewBitmap.Width := FBmp.Width;
 for j := 1 to FBmp.Height -2 do
 for i := 1 to FBmp.Width -2 do
 with FBmp.Canvas do begin
     r := (GetRValue(Pixels[i, j]) +
GetRValue(Pixels[i +1, j]) +
GetRValue(Pixels[i -1, j]) +
GetRValue(Pixels[i, j +1]) +
GetRValue(Pixels[i, j -1]) +
GetRValue(Pixels[i +1, j +1]) +
GetRValue(Pixels[i +1, j -1]) +
GetRValue(Pixels[i -1, j +1]) +
GetRValue(Pixels[i -1, j -1])) div 9;
     g := (GetGValue(Pixels[i, j]) +
GetGValue(Pixels[i +1, j]) +
GetGValue(Pixels[i -1, j]) +
GetGValue(Pixels[i, j +1]) +
GetGValue(Pixels[i, j -1]) +
GetGValue(Pixels[i +1, j +1]) +
GetGValue(Pixels[i +1, j -1]) +
GetGValue(Pixels[i -1, j +1]) +
GetGValue(Pixels[i -1, j -1])) div 9;
     b := (GetBValue(Pixels[i, j]) +
GetBValue(Pixels[i +1, j]) +
GetBValue(Pixels[i -1, j]) +
GetBValue(Pixels[i, j +1]) +
GetBValue(Pixels[i, j -1]) +
GetBValue(Pixels[i +1, j +1]) +
GetBValue(Pixels[i +1, j -1]) +
GetBValue(Pixels[i -1, j +1]) +
GetBValue(Pixels[i -1, j -1])) div 9;
     FNewBitmap.Canvas.Pixels[i, j] := RGB(r, g, b);
end;
end;


 
Mihey ©   (2004-03-29 21:01) [5]

Ещё есть выход. Антиалиасинг всего. Просто увеличиваем изображение в три раза через resampling и потом в три раза егоу меньшаем :). Работает.



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

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

Наверх




Память: 0.46 MB
Время: 0.039 c
1-1084998259
greenrul
2004-05-20 00:24
2004.06.06
Удаление history+cache в Internet Explorer


6-1082269565
Mim1
2004-04-18 10:26
2004.06.06
Как избежать повления окна подключения к сети в win xp?


1-1085539377
Vilux
2004-05-26 06:42
2004.06.06
Компонент для текста с фоном


14-1084813056
_student
2004-05-17 20:57
2004.06.06
Как распараллелить задачу на несколько машин?


14-1084905650
DeadMeat
2004-05-18 22:40
2004.06.06
Matrix





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский