Форум: "Основная";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
ВнизСтиль карандаша как в DrawFocusRect??? Найти похожие ветки
← →
AndreyRu (2008-09-09 12:09) [0]Доброго времени суток Всем!
Подскажите пожалуйста как создать карандаш со стилем как у API функции DrawFocusRect! PS_DOT не подходит, мне нужна именно точечная линия. Заранее спасибо!
← →
{RASkov} © (2008-09-09 12:29) [1]
procedure DDAProc (X,Y: Integer; Cnv: TCanvas); stdcall;
begin
if Odd(X) or Odd(Y) then Cnv.Pixels[X,Y]:=clBlack else Cnv.Pixels[X,Y]:=Cnv.Brush.Color;
end;
procedure MyLine(Cnv: TCanvas; FromPoint, ToPoint: TPoint);
begin
LineDDA(FromPoint.X, FromPoint.Y, ToPoint.X, ToPoint.Y, @DDAProc, Integer(Cnv));
end;
procedure TForm1.Button1Click(Sender: TObject);
MyLine(Canvas, Point(10, 10), Point(100, 10));
MyLine(Canvas, Point(100, 10), Point(100, 100));
MyLine(Canvas, Point(100, 100), Point(10, 100));
MyLine(Canvas, Point(10, 100), Point(10, 10));
end;
← →
KilkennyCat © (2008-09-09 12:36) [2]
> {RASkov} © (09.09.08 12:29) [1]
не, не катит, надо, чтоб следующий цвет был цветом фона.
← →
{RASkov} © (2008-09-09 12:44) [3]> [2] KilkennyCat © (09.09.08 12:36)
Не понял шутку юмора :)
> чтоб следующий цвет был цветом фона.
Там же как раз цвет фона и используется поочередно с черным ;) Внимательнее смотрим на DDAProc)
Конечно сорри за моё форматирование(или его отсутствие) но вот так вот...
:)
← →
KilkennyCat © (2008-09-09 12:48) [4]гм... наверное. я не помню LineDDA
← →
AndreyRu (2008-09-09 12:50) [5]Спасибо Вы мне очень помогли!
← →
clickmaker © (2008-09-09 12:59) [6]я бы рисовал сначала на битмапе. Попиксельный доступ к канве форме - не самый быстрый способ
← →
{RASkov} © (2008-09-09 14:40) [7]> я бы рисовал сначала на битмапе. Попиксельный доступ к канве
> форме - не самый быстрый способ
А этот способ будет еще медленнее.... Так как тот же попиксельный доступ к канве битмапа, только потом еще и копирование битмапа на канву формы(или куда там) - моргать меньше будет - да, но скорость не выше. Хотя я может и не правильно воспроизвел [6] в мозгу, но.... Имхо всё это...
А вообще в DDAProc можно наверное и скайлайн завертеть, тут я не помошник, мысль толкнул(в свое время эту мысль тут и почерпнул... Анатолий, помоему мне, или не мне, подсказал данную(LineDDA) "штучку"), а дальше нужно пробывать, реализовывать, оптимизировать, развивать....)
← →
clickmaker © (2008-09-09 14:56) [8]> А вообще в DDAProc можно наверное и скайлайн завертеть
ну да, разумеется
← →
Юрий Зотов © (2008-09-10 08:37) [9]А почему просто не вызвать DrawFocusRect?
← →
Ins © (2008-09-11 12:41) [10]Используй расширенные перья, вместо стандартных. Проблемка лишь в том, что в VCL нет их поддержки, но это решаемо:
procedure TForm1.FormPaint(Sender: TObject);
var
PenHandle: HPEN;
BrushStyle: tagLOGBRUSH;
NewPen: TPen;
begin
with Canvas do
begin
BrushStyle.lbStyle:=BS_SOLID;
BrushStyle.lbColor:=ColorToRGB(Pen.Color);
BrushStyle.lbHatch:=0;
PenHandle:=ExtCreatePen(PS_GEOMETRIC or PS_DOT,Pen.Width,BrushStyle,0,nil);
NewPen:=TPen.Create;
try
NewPen.Handle:=PenHandle;
Canvas.Pen:=NewPen;
MoveTo(0,100);
LineTo(300,100);
finally
NewPen.Free;
end;
end;
end;
← →
antonn © (2008-09-11 21:53) [11]
> А этот способ будет еще медленнее.... Так как тот же попиксельный
> доступ к канве битмапа, только потом еще и копирование битмапа
> на канву формы(или куда там) - моргать меньше будет - да,
> но скорость не выше. Хотя я может и не правильно воспроизвел
> [6] в мозгу, но.... Имхо всё это...
я сейчас могу сказать ерунду, но мне кажется, что у form.canvas и у Tbitmap.canvas немного разные процессы происходят при рисовании :)
Уж не знаю, может там лочится/анлочится что то (смотреть мне сейчас лень), но операции над битмапом в памяти обычно куда быстрее, чем с канвасом на контролах.
провел небольшой тест, рандомом в квадрате 0,0,300,300 выбирались координаты и на них выставлялся рандомный цвет. В цикле 100К пикселей через canvas.pixels[], результат:
Form1.Canvas - 0,159835 секунд
bitmap.Canvas - 0,099619 секунд (с учетом копирования всего битмапа на канву формы, ниже тоже).
bitmap.Canvas с насильно выставленым pf32bit - 0,04614 секунд
bitmap.Canvas через сканлайн - 0,0248 секунд (учитывая, что выборка пикселей по случайным строкам)
← →
KilkennyCat © (2008-09-12 00:32) [12]ну вы даете... объяснение про скорости попиксельности в каждой книжке ж было... по крайней мере, для D7
← →
antonn © (2008-09-12 00:37) [13]
> KilkennyCat © (12.09.08 00:32) [12]
что именно? кинь цитатку...
← →
KilkennyCat © (2008-09-12 00:40) [14]ну, что самый медленный - попиксельно, через буфер и флип - быстрее, через скайнлайн еще быстрее... цитату искать лень, я сие у тейксеры и пачеки читал, вроде, да и у остальных... в разделе "графика"
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c