Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
ВнизПоворот и масштабирование Bitmap Найти похожие ветки
← →
CMOS © (2007-07-05 08:09) [0]Нужно не ВЫВЕСТИ Bitmap повернутым, а преобразовать?
Желательно чтобы работало с 1-битными картинками.
← →
Однокамушкин (2007-07-05 08:25) [1]http://algolist.manual.ru/graphics/rotate.php
← →
Инс © (2007-07-05 10:42) [2]SetWorldTransform
← →
CMOS © (2007-07-05 21:28) [3]Я не мастер в С++, но по-моему перевел правильно. Поправьте, если не так.
procedure TForm1.FormPaint(Sender: TObject);
begin
picture:= TBitmap.Create; buffer:= TBitmap.Create;
angle:= pi/6;
picture.LoadFromFile("image.bmp");
buffer.LoadFromFile("image.bmp");//для одинакового размера и цвета
Scale:= 1.0/(1.0+0.2*cos(angle*4.0)); //коэффициент yвеличения каpтинки
SinA:= sin(angle); CosA:= cos(angle);
// какyю точкy каpтинки надо изобpажать в веpхней левой точке экpана?
// (использyются вычисления с фиксиpованной точкой в фоpмате 16.16)
x0:= Round(160.0+scale*(-160.0*CosA+100.0*1.2*SinA))*65536;
y0:= Round(100.0+scale*(-100.0*CosA-160.0*SinA/1.2))*65536;
// на сколько надо сместиться по каpтинке пpи пеpемешении
// по экpанy на пиксель влево
xdx:= Round(scale * CosA*65536);
xdy:= Round(scale * SinA*65536.0/1.2);
// на пиксель вниз
ydx:= Round(-scale*SinA*65536.0*1.2);
ydy:= Round(scale*CosA*65536.0);
for y:=0 to picture.Height-1 do
begin
// x0, y0 - кооpдинаты на каpтинке начала текyщей стpоки сканиpования
// x1, y1 - кооpдинаты на каpтинке текyщей pисyемой точки
x1:= x0;
y1:= y0;
for x := 0 to picture.Width-1 do
begin
// xp, yp - кооpдинаты на каpтинке текyщей pисyемой точки (фоpмат 16:0)
xp:= x1 shr 16;
yp:= y1 shr 16;
// "клиппинг"
if (xp>=0) or (xp<=picture.Width-1) or (yp>=0) or (yp<=picture.Height-1) then
buffer.Canvas.Pixels[y, x]:= picture.Canvas.Pixels[yp, xp]
else buffer.Canvas.Pixels[y, x]:= clblack;
// пеpедвижение вдоль стpоки сканиpования
Inc(x1, xdx);
Inc(y1, xdy);
end;
// пеpеход к новой стpоке сканиpования
Inc(x0, ydx);
Inc(y0, ydy);
end;
Canvas.Draw(10,10,buffer);
end;
Не работает как с цветными так и с монохромными. Просто на выходе черный экран.
← →
Tack © (2007-07-07 12:05) [4]http://www.graphics32.org/wiki/
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.046 c