Показать сообщение отдельно
  #3  
Старый 25.04.2008, 10:47
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Попытка рисовать на канве компонента, который видим, приводит к тому, что система на вывод каждой точки перерисовывает прямоугольник компонента. Тем более, что отрисовка точками самая медленная графическая операция.
Выход такой. Рисовать надо на канве, которая в этот момент не видна (самое простое - канва bitmap). Затем нарисованное скопировать на видимую канву.
Примерно так:
Код:
procedure TForm1.Button6Click(Sender: TObject); 
var
  BM : TBitMap;
begin
  BM := TBitMap.Create;
  BM.Width := Image1.Width;
  BM.Height := Image1.Height;

  with BM.Canvas do begin
    Brush.Color := Image1.Color;
    ...
    for n:=1 to nn do begin
      xx:=random(form1.Image1.ClientWidth-m) ;
      yy:=random(form1.Image1.ClientHeight);
      Pixels[xx,yy]:=clwhite;
    end;
    ...
  end;
  Form1.Image1.Canvas.CopyRect(Image1.ClientRect, BM.Canvas, Image1.ClientRect);
  BM.Free;
end;
Ответить с цитированием