Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Вращение битмапа   Найти похожие ветки 

 
X-Disa   (2004-12-01 14:00) [0]

Здрасте. Вот вопрос, как быстро повернуть битмап вокруг заданной точки на какой-то угол?


 
Студент_   (2004-12-04 20:17) [1]

Вообще для этого, что в OpenGL"e, что в Direct"e существуют специальные функции, работающие довольно быстро. Но если не знаем их или не хотим использовать - можно вручную, заглянув в справочник по математике (куда ж без него:)

...
var
 Form1: TForm1;
 angle: integer = 0;
 bmp: TBitmap;
...
procedure TForm1.rotate;
var
i, j, x, y: integer;
ang:  extended;
c, s: real;

begin
 inc(angle);
 ang:= degtorad(angle);
 s:=sin(ang);
 c:=cos(ang);
 caption:=inttostr(angle);
 for i:=0 to bmp.height do
         for j:=0 to bmp.Width do
         begin
            x:=ceil(i*c + j*s);
            y:=ceil(-i*s + j*c);
            canvas.Pixels[x+200,y+200]:=bmp.canvas.Pixels[i,j];
         end;
end;

200 - отступ от края экрана, чтобы помеcтился рисунок. angle - угол поворота - рекомендую для примера засунуть его в ontimer.
Естественно, bmp в начале нужно загрузить из файла.

procedure TForm1.FormCreate(Sender: TObject);
begin
 bmp:=TBitmap.Create;
 bmp.LoadFromFile("an.bmp");
end;

И в конце очистить:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 bmp.Free;
end;

Работает довольно медленно и немного искажает картинку, но зато вручную :))


 
Студент_   (2004-12-04 21:31) [2]

И не забыть подключить math в uses.
А вообще выбор функции зависит от конкретной задачи.


 
Студент_   (2004-12-05 12:52) [3]

Извиняюсь - перепутал height и width.


 
X-Disa   (2004-12-05 12:52) [4]

Это я сам так писал, на картинке белые точки появляются. Как можно без искажения?


 
Ozone ©   (2004-12-05 14:23) [5]

PlgBlt


 
X-Disa   (2004-12-06 16:33) [6]

Можно поподробней, че то не понял как эта штука работает :(



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
14-1108997302
Delirium
2005-02-21 17:48
2005.03.27
"Вышел в свет" или балуемся с web-камерй


1-1111053076
Dimich1978
2005-03-17 12:51
2005.03.27
очитисть array of Ansistring


9-1104779300
Dic
2005-01-03 22:08
2005.03.27
Загрузка графики в PowerDraw3.


1-1110548376
Шурик Ш
2005-03-11 16:39
2005.03.27
Не могу открыть на чтение файл, который занят другим процесом...


1-1110950725
SergP
2005-03-16 08:25
2005.03.27
Поиск подстроки в контенте принятом TClientSocket