Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2011, 20:53   #1
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию Ускорить процесс.

Здоавствуйте. Сделал прог. Deiphi, поворот эллепса по пиксельно. После
нового пикселя, прог. прорисовавоет всю картинку, это очень долго.
Сменил процессор, результат не изменился. Подскажите пожалусто, ка-
кие нужно ввести команды, чтобы процессор прорисовавол окончательное
положение эллипса, а не рисовал заново всю картинку, после каждого перемещение пикселя. Зарание блогадарю.
Victor1963 вне форума Ответить с цитированием
Старый 23.06.2011, 07:16   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
поворот эллепса по пиксельно
Это что за изврат? Стерли старый и нарисовали новый.
p51x вне форума Ответить с цитированием
Старый 23.06.2011, 09:36   #3
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

А где код?
ЗЫ для этих целей лучше использовать ScanLine
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 23.06.2011, 21:51   #4
Victor1963
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 31
По умолчанию

Смысол всей песни в том, мышью рисуется произвольно эллипс, орентируеться по оси X вершиной, проходит 3 раза через ось, для точного определения. В фигурных скобках другие параметры.
Код:
procedure TForm1.Button1Click(Sender: TObject);
Label k1,k2,k3,k4,k5,k6;
 var
 y,ang:real;
 x,c,r,m,l,count,count1:integer;
begin
{ Canvas.Pixels[594,297]:=clBlack;
 Canvas.Pixels[596,298]:=clBlack;
 Canvas.Pixels[598,299]:=clBlack;
 Canvas.Pixels[600,300]:=clBlack;
 Canvas.Pixels[598,301]:=clBlack;
 Canvas.Pixels[596,302]:=clBlack;
 Canvas.Pixels[594,303]:=clBlack; }
  l:=0;
  k1:count:=0;
  k2:x:=500;//Вращение по часовой.
  m:=0;
  y:=300;
  ang:=6.2799;
{for r:=94 to 100 do}for r:=1 to 400 do //Перенос первой точки по часовой.
 begin
 c:=Canvas.Pixels[round(x+r*cos(6.28)),round(y+r*sin(6.28))];
 if c=clBlack then
  begin
  m:=r;
 Canvas.Pixels[round(x+r*cos(6.28)),round(y+r*sin(6.28))]:=clWhite;
 end;
  end;
{While ang>(6.279) do }While ang>(0) do //Вращение по часовой.
 begin
{for r:=94 to 100 do }for r:=1 to 400 do
 begin
 c:=Canvas.Pixels[round(x+r*cos(ang)),round(y+r*sin(ang))];
 if c=clBlack then
  begin
   Canvas.Pixels[round(x+r*cos(ang+0.01)),round(y+r*sin(ang+0.01))]:=clBlack;
   Canvas.Pixels[round(x+r*cos(ang)),round(y+r*sin(ang))]:=clWhite;
   end;
    end;
     ang:=ang-0.0001;
     end;
     Canvas.Pixels[round(x+m*cos(6.28+0.01)),round(y+m*sin(6.28+0.01))]:=clBlack;//Установ первой точки по часовой.
 begin
for x:=603 downto 594 do//for x:=1134 downto 500 do//Определение вершини эллипса на оси X, по часовой.
 begin
 c:=Canvas.Pixels[x,300];
if (c=clBlack) and (x>=l) then //Определение количество разрывов, дефектов в эллипсе, по часовой.
 begin
 l:=x;
 goto k1;
 end;
  end;
 count:=count+1;
if count<2 then
 begin
 goto k2;
 end
else
 begin
 goto k3;
  end;
   end;
k3:count1:=0;
k4:{ang:=0;}ang:=0.011;//Вращение против чассовой.
 m:=0;
 x:=500;
 y:=300;
{for r:=94 to 100 do }for r:=1 to 400 do
 begin
 c:=Canvas.Pixels[round(x+r*cos(0.01)),round(y+r*sin(0.01))];//Перенос первой точки против часовой.
 if c=clBlack then
 begin
 m:=r;
 Canvas.Pixels[round(x+r*cos(0.01)),round(y+r*sin(0.01))]:=clWhite;
 end;
  end;
{While ang<(0.0009) do}While ang<(6.28) do//Вращение против час.
 begin
{for r:=94 to 100 do}for r:=1 to 400 do
 begin
 c:=Canvas.Pixels[round(x+r*cos(ang)),round(y+r*sin(ang))];
 if c=clBlack then
 begin
  Canvas.Pixels[round(x+r*cos(ang-0.01)),round(y+r*sin(ang-0.01))]:=clBlack;
  Canvas.Pixels[round(x+r*cos(ang)),round(y+r*sin(ang))]:=clWhite;
  end;
   end;
    ang:=ang+0.0001;
    end;
    Canvas.Pixels[round(x+m*cos(0)),round(y+m*sin(0))]:=clBlack;//Установ первой точки против часовой.
  begin
{for x:=603 downto 594 do}for x:=1134 downto 500 do//Олределение вершини эллипса на оси X, против часовой.
 begin
 c:=Canvas.Pixels[x,300];
    
if (c=clBlack) and (x>=l) then // Определение количество разрывов, дефектов в эллипсе, против часовой.
 begin
 l:=x;
 goto k3;
 end;
  end;
 count1:=count1+1;
  if count1<2 then
   begin
   goto k4;
    end
   else
    begin
    goto k5;
     end;
      end;

 k5:x:=500; //Вращение по часовой заключительный цикл.k5
 m:=0;
 y:=300;
 ang:=6.2799;
{for r:=94 to 100 do }for r:=1 to 400 do //Перенос первой точки по часовой.
 begin
 c:=Canvas.Pixels[round(x+r*cos(6.28)),round(y+r*sin(6.28))];
  if c=clBlack then
 begin
  m:=r;
  Canvas.Pixels[round(x+r*cos(6.28)),round(y+r*sin(6.28))]:=clWhite;
  end;
   end;
  {While ang>(6.279) do}While ang>(0) do //Вращение по часовой.
 begin
{for r:=94 to 100 do}for r:=1 to 400 do
 begin
 c:=Canvas.Pixels[round(x+r*cos(ang)),round(y+r*sin(ang))];
 if c=clBlack then
 begin
  Canvas.Pixels[round(x+r*(ang+0.01)),round(y+r*sin(ang+0.01))]:=clBlack;
  Canvas.Pixels[round(x+r*cos(ang)),round(y+r*sin(ang))]:=clWhite;
  end;
   end;
   ang:=ang-0.0001;
    end;

    Canvas.Pixels[round(x+m*(6.28+0.01)),round(y+m*(6.28+0.01))]:=clBlack;//Установка первой точки по часовой.
  begin
  {for x:=603 downto 594 do }for x:=1134 downto 500 do//Определение вершини эллипса по часовой.
  begin
  c:=Canvas.Pixels[x,300];
   if (c=clBlack) and (x>=l) then //Определение вершини окончательно.
    begin
    goto k6;
    end;
     end;
      goto k5;
       end;
        k6:ListBox1.Items.Add('Финиш');
          end;




procedure TForm1.Form1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 Canvas.Pixels[500,300]:=clBlack;//Центр.
 Caption:=Format('Mouse in x=%d, y=%d',[x,y]);
 if ssShift in shift then
 Canvas.Pixels[x,y]:=clBlack;
end;

end.

Последний раз редактировалось alexBlack; 23.06.2011 в 22:24. Причина: Используйте тэг CODE
Victor1963 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить работу БД SERG1980 БД в Delphi 9 09.11.2010 23:30
ускорить время в windows grafgrial Общие вопросы Delphi 7 23.07.2010 09:37
Ускорить работу с БД Poltev86 БД в Delphi 2 25.05.2010 09:46
Нужно ускорить GetPixel snow_max Общие вопросы C/C++ 3 06.02.2010 18:18
Помогите ускорить процесс копирование столбцов с ГПР sergiksergik Microsoft Office Excel 2 21.05.2009 20:46