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

Вниз

Как красиво ( без зазубрин ) нарисовать наклонную линию ?   Найти похожие ветки 

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

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

Наверх




Память: 0.49 MB
Время: 0.006 c
8-1205002273
farrex
2008-03-08 21:51
2016.03.13
Эллипс под углом.


15-1435569845
pavelnk
2015-06-29 12:24
2016.03.13
Потрепаться, вот


15-1435756478
xayam
2015-07-01 16:14
2016.03.13
Голография


15-1435667122
Дмитрий С
2015-06-30 15:25
2016.03.13
hex 2 bin


2-1409036810
Артурчик
2014-08-26 11:06
2016.03.13
передача по FTP