Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизКак использовать функцию 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c