Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
6-5117
neodiX
2002-12-07 15:50
2003.02.03
Изменение размера пакета TCP


14-5141
Supreme
2003-01-15 20:14
2003.02.03
Прикольные имена?


3-4716
Чудак
2003-01-17 17:45
2003.02.03
фильтровка записи


3-4816
Oleg__
2003-01-17 10:01
2003.02.03
Запрос из dll


6-5103
mouse_1
2002-11-24 10:53
2003.02.03
Работа с сетевой картой





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