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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1085455823
пинг
2004-05-25 07:30
2004.06.06
Сжатие изображений при помощи нейронных сетей


14-1084476090
Mihey
2004-05-13 23:21
2004.06.06
Выделение кода


8-1080520839
3APA3A
2004-03-29 04:40
2004.06.06
Скопировать экран в буфер


4-1083080101
DoG
2004-04-27 19:35
2004.06.06
Pipe s


1-1085570657
umsyty
2004-05-26 15:24
2004.06.06
Можно ли загрузить графическое изображение из потока?