Главная страница
    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.038 c
1-1085323785
uZver
2004-05-23 18:49
2004.06.06
Достучаться до небес... Тьфу. Значков!


14-1084771933
SergP
2004-05-17 09:32
2004.06.06
Хочу учиться.


14-1085250003
NakedSoft
2004-05-22 22:20
2004.06.06
А кто использовал эту программу ?


6-1082261812
LLiriK
2004-04-18 08:16
2004.06.06
Отправка SMS


1-1085214015
AlexG
2004-05-22 12:20
2004.06.06
Кто-нибудь встречался с ошибкой Excel?





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