Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизВращение битмапа Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c