Форум: "Media";
Текущий архив: 2016.03.13;
Скачать: [xml.tar.bz2];
ВнизКак красиво ( без зазубрин ) нарисовать наклонную линию ? Найти похожие ветки
← →
YuProhorov © (2009-02-26 16:21) [0]Добрый день всем !
Как красиво ( без зазубрин ) нарисовать наклонную линию ?
Мне подсказали, что где-то в настройках надо установить флажек GDI Aliasing , но я ничего подобного не нашел.
Помогите, пожалуйста нарисовать линию.
Прохоров Юрий star716@mail.ru
← →
Vetal (2009-02-26 17:31) [1]Если с использованием GDI - то вручную, если с GDI+, то используя свойство объекта TGPGraphics.SetSmoothingMode.
← →
MBo © (2009-02-26 17:32) [2]Есть такой алгоритм Ву (Wu) рисования линий с антиалиасингом
← →
DVM © (2009-02-26 19:10) [3]Вот, только это сравнительно медленно:
TYPE
TFColor = record b,g,r:Byte end;
PFColor =^TFColor;
procedure SmoothLine(dc: HDC; x1, y1, x2, y2: Integer; c: TFColor);
var
dx,dy,d,s,ci,ea,ec: Integer;
p: tFColor;
begin
if(y1=y2)or(x1=x2)then
begin
MoveToEx(dc, X1, Y1, nil);
LineTo(dc, X2,y2);
end
else
begin
if y1>y2 then
begin
d:=y1; y1:=y2; y2:=d;
d:=x1; x1:=x2; x2:=d;
end;
dx:=x2-x1;
dy:=y2-y1;
if dx>-1 then s:=1 else
begin
s:=-1;
dx:=-dx;
end;
ec:=0;
if dy>dx then
begin
ea:=(dx shl 16)div dy;
while dy>1 do
begin
Dec(dy);
d:=ec;
Inc(ec,ea);
ec:=ec and $FFFF;
if ec<=d then Inc(x1,s);
Inc(y1);
ci:=ec shr 8;
p.r:=GetRValue(GetPixel(DC,X1,Y1));
p.g:=GetgValue(GetPixel(DC,X1,Y1));
p.b:=GetbValue(GetPixel(DC,X1,Y1));
p.b:=(p.b-c.b)*ci shr 8 + c.b;
p.g:=(p.g-c.g)*ci shr 8 + c.g;
p.r:=(p.r-c.r)*ci shr 8 + c.r;
SetPixel(dc, x1, y1, Rgb(p.r, p.g, p.b));
p.r:=GetRValue(GetPixel(DC,X1+s,Y1));
p.g:=GetgValue(GetPixel(DC,X1+s,Y1));
p.b:=GetbValue(GetPixel(DC,X1+s,Y1));
p.b:=(c.b-p.b)*ci shr 8 + p.b;
p.g:=(c.g-p.g)*ci shr 8 + p.g;
p.r:=(c.r-p.r)*ci shr 8 + p.r;
SetPixel(dc, x1+s, y1, Rgb(p.r, p.g, p.b));
end;
end else
begin
ea:=(dy shl 16)div dx;
while dx>1 do
begin
Dec(dx);
d:=ec;
Inc(ec,ea);
ec:=ec and $FFFF;
if ec<=d then Inc(y1);
Inc(x1,s);
ci:=ec shr 8;
p.r:=GetRValue(GetPixel(DC,X1,Y1));
p.g:=GetgValue(GetPixel(DC,X1,Y1));
p.b:=GetbValue(GetPixel(DC,X1,Y1));
p.b:=(p.b-c.b)*ci shr 8 + c.b;
p.g:=(p.g-c.g)*ci shr 8 + c.g;
p.r:=(p.r-c.r)*ci shr 8 + c.r;
SetPixel(dc, x1, y1, Rgb(p.r, p.g, p.b));
p.r:=GetRValue(GetPixel(DC,X1,Y1+1));
p.g:=GetgValue(GetPixel(DC,X1,Y1+1));
p.b:=GetbValue(GetPixel(DC,X1,Y1+1));;
p.b:=(c.b-p.b)*ci shr 8 + p.b;
p.g:=(c.g-p.g)*ci shr 8 + p.g;
p.r:=(c.r-p.r)*ci shr 8 + p.r;
SetPixel(dc, x1, y1+1, Rgb(p.r, p.g, p.b));
end;
end;
end;
end;
← →
DVM © (2009-02-26 19:11) [4]Оптимизируешь сам. Там много чего можно улучшить.
← →
antonn © (2009-02-26 22:06) [5]
> DVM ©
fastlib? :)
← →
DVM © (2009-02-27 00:56) [6]
> antonn © (26.02.09 22:06) [5]
> fastlib? :)
Точно. Только это там оно было "Fast", здесь же из-за GetPixel/SetPixel совсем не фаст.
← →
brother © (2009-02-27 04:36) [7]> Точно. Только это там оно было "Fast", здесь же из-за GetPixel/SetPixel
> совсем не фаст.
оптимизация - домашнее задание автору топика ;)
← →
Б (2009-03-05 10:25) [8]http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%92%D1%83
← →
antonn © (2009-03-08 00:36) [9]кстати, выше код - случайно не он? :)
← →
Jeer © (2009-03-17 18:22) [10]Без зазубрин нарисовать нельзя, можно только снизить их заметность.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2016.03.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c