Форум: "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