Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1306828683
alexshad
2011-05-31 11:58
2016.03.13
Delphi vs MS SQL


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


15-1435660178
Dimka Maslov
2015-06-30 13:29
2016.03.13
Как эта штука называется


15-1435689210
SKIPtr
2015-06-30 21:33
2016.03.13
поздравляю всех с 31 июня


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





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