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

Вниз

Как использовать функцию LineDDA?   Найти похожие ветки 

 
Nikolai_S ©   (2003-01-24 17:44) [0]

У кого нибудь есть пример использования функции LineDDA? Нужно заданным цветом нарисовать пунктирную линию (из отдельных пикселей) на объекте TCanvas.


 
Anatoly Podgoretsky ©   (2003-01-24 18:01) [1]

Что именно в ней непонятно?


 
Nikolai_S ©   (2003-01-24 18:06) [2]

Просто нужен конкретный пример. Скажем как с помощью нее нарисовать на любой канве (TCanvas) пунктирную линию. Если я в цикле использую свойство TCanvas.Pixels[x,y], то пунктирная линия рисуется медленно. Мне подсказали функцию LineDDA, но я что-то, просмотрев справку, не смог понять до конца...


 
MBo ©   (2003-01-24 18:25) [3]

Procedure LineDDAProc( x, y: Integer; dc: HDC); stdcall;
Begin
if Odd(x) then
SetPixel( DC, x, y, clBlack);
End;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
LineDDA( 10,10, 200, 200, @LineDDAProc, Canvas.Handle);
end;


 
MBo ©   (2003-01-24 18:28) [4]

Кстати, наклонные линии нужны или нет?
Если нет, быстрее будет PatBlt


 
Anatoly Podgoretsky ©   (2003-01-24 18:30) [5]

Она вообще ничего не рисует, не для этого она, но можно рисовать в совокупности с Pixels
Ускорить можно если рисовать не на Pixels, но это тема другого вопроса.


 
Nikolai_S ©   (2003-01-24 19:11) [6]

2 MBo
Рисовать надо горизонтальную линию
Вообще стало работать помедленнее :-( На компе Celeron 366 линия длиной в 1000 пикселей оисуется за 0 милисекунд. А на Pentium 166 эта же линия рисуется:
1. с пом. TCanvav.Pixels[x,y] - за 1-3 МлСек
2. с пом. LineDDA & SetPixel - за 2-5 МлСек

PatBlt вообще залитые прямоугольники рисует. Или нужно рисовать прямоугольник размером с точку?

2 Anatoly Podgoretsky
Тогда другой вопрос:
как реально ускорить процесс прорисовки пунктирной линии?


 
MBo ©   (2003-01-24 19:14) [7]

Нужно создать кисть-вертикальную зебру и PatBlt прямоугольник высотой в точку. Это работает быстро.

Возможно, хватит и скорости Canvas.ScanLine - это по крайней мере на порядок быстрее, чем Pixels


 
Nikolai_S ©   (2003-01-24 19:23) [8]

У TCanvas нету метода ScanLine. Он есть только у TBitmap. Тогда как создать нужную кисть и применить ее в функции PatBlt причем нужного цвета TColor? (Пример?)


 
MBo ©   (2003-01-24 19:50) [9]

Тебе лень самому разобраться????

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
dc:HDC;
b:TBitmap;
begin
b:=TBitmap.Create;
b.Width:=8;
b.Height:=1;
for i:=0 to 3 do
b.Canvas.Pixels[2*i,0]:=clRed;
Canvas.Brush.Bitmap:=b;
dc:=Canvas.Handle;
for i:=1 to 100 do
PatBlt(dc,10,5*i, 600, 1, PATCOPY )
end;


 
Anatoly Podgoretsky ©   (2003-01-24 19:53) [10]

Не рисовать на каные, тем более с помощью Pixels
Рисовать на канве ЕBitmap - ScanLine и BitBlt
LineDDA использовать только если линия не стандартная, оно служит только для расчета координат
Простые линии можно рисовать с помощью Line



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.013 c
4-5344
vasilych
2002-12-20 13:59
2003.02.03
Стандартное контекстное меню.


6-5111
brestmarket
2002-12-09 00:49
2003.02.03
Как найти и выделить необходимый текст в WebBrowser?


1-4946
alois
2003-01-26 18:07
2003.02.03
Вид страницы как в Word


7-5312
Shtock
2002-11-26 11:08
2003.02.03
инициализация модема


1-4886
Fill
2003-01-24 21:43
2003.02.03
StatusBar-Image