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

Вниз

Поворот и масштабирование 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
15-1183742598
wind1
2007-07-06 21:23
2007.08.05
автозагрузка флэшки


2-1184062709
AleksandrR
2007-07-10 14:18
2007.08.05
Работа с датой


3-1177407202
Павел Калугин
2007-04-24 13:33
2007.08.05
Посоветуйте как лучше организовать календарь


8-1162375462
-=Tiger=-
2006-11-01 13:04
2007.08.05
BMP-файлы и RGB


15-1184171968
NiGGa
2007-07-11 20:39
2007.08.05
Delphi + Castalia