Главная страница
    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.008 c
1-5057
Grizl
2003-01-24 11:56
2003.02.03
Стыдно, но ... динамический масскив :(


14-5172
GebbelZ
2003-01-17 00:02
2003.02.03
Смена прошивки мамы :(


3-4801
SerKom
2003-01-17 12:40
2003.02.03
выпадающий список TDBLookUpComboBox


1-4832
qwerty2
2003-01-24 12:28
2003.02.03
Как узнать текущий формат системной даты?


14-5263
smok_er
2003-01-16 17:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский