Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как использовать функцию LineDDA? [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Nikolai_S ©   (2003-01-24 17:44:00) 

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


Anatoly Podgoretsky   (2003-01-24 19:53:00) [1]

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


MBo   (2003-01-24 19:50:00) [2]

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

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;


Nikolai_S   (2003-01-24 19:23:00) [3]

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


MBo   (2003-01-24 19:14:00) [4]

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

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


Nikolai_S   (2003-01-24 19:11:00) [5]

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

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

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


Anatoly Podgoretsky   (2003-01-24 18:30:00) [6]

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


MBo   (2003-01-24 18:28:00) [7]

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


MBo   (2003-01-24 18:25:00) [8]

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;


Nikolai_S   (2003-01-24 18:06:00) [9]

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


Anatoly Podgoretsky   (2003-01-24 18:01:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо