![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как повернуть картинку на любой угол?
Shadowofman © (2003-05-19 13:33:00)
Приветствую всех!
Подскажите, пожалуйста, возможно ли вообще как-нибудь повернуть картинку JPEG, находящуюся на форме, на какой-нибудь угол, например, градуса на 3-4 относительно ее оси?
Заранее благодарен.
Плохой человек (2003-05-19 22:36:00) [1]
http://www.efg2.com
Delphi5.01 (2003-05-19 21:54:00) [2]
a ia ispolzoval
PlgBlt(Bitmap.Canvas.Handle,a,
SRCBitMap.Canvas.Handle,0,0,BitMap.Width,BitMap.Height,
Bitmap.MaskHandle,0,0);
gde a eto masiv 3 tochek paralelograma, pervaia-levi verxni ugol, vtoraia-pravi verxni, a tretaia-nijni levi.
no vsa taje problema rabotaet tolko v operacionkax na baze NT.
MBo (2003-05-19 14:54:00) [3]
XNew:=X*cos(fi)+Y*sin(fi)+X0
YNew:=-X*sin(fi)+Y*cos(fi)+Y0
Чтобы не было дырок, надо X и Y старой картинки находить для каждой новой точки (Xnew,YNew)
Shadowofman (2003-05-19 14:20:00) [4]
В NT все понятно. А как-быть в Win9x?
Леприкон (2003-05-19 14:01:00) [5]Вот пример для BitMap для NT.
var bm:TBitMap;
xf:XFORM;
Angle:real;
begin
bm:=TBitMap.Create;
bm.LoadFromFile("Путь к файлу");
Angle:=20;//угол поворота в градусах
xf.eM11:=cos(degtorad(Angle)); xf.eM12:=-sin(degtorad(Angle));
xf.eM21:=sin(degtorad(Angle)); xf.eM22:=cos(degtorad(Angle));
SetGraphicsMode(Form1.Canvas.Handle, GM_ADVANCED);
ModifyWorldTransform(Form1.Canvas.Handle,xf,MWT_RIGHTMULTIPLY);
( Form1.Canvas.Handle,0,0,bm.Width,bm.Height,bm.Canvas.Handle,0,0,MERGECOPY)Вот пример для BitMap для NT.
var bm:TBitMap;
xf:XFORM;
Angle:real;
begin
bm:=TBitMap.Create;
bm.LoadFromFile("Путь к файлу");
Angle:=20;//угол поворота в градусах
xf.eM11:=cos(degtorad(Angle)); xf.eM12:=-sin(degtorad(Angle));
xf.eM21:=sin(degtorad(Angle)); xf.eM22:=cos(degtorad(Angle));
SetGraphicsMode(Form1.Canvas.Handle, GM_ADVANCED);
ModifyWorldTransform(Form1.Canvas.Handle,xf,MWT_RIGHTMULTIPLY);
BitBlt(Form1.Canvas.Handle,0,0,bm.Width,bm.Height,bm.Canvas.Handle,0,0,MERGECOPY);
bm.Free;
end;
___________
Спасибо MBo
MBo (2003-05-19 13:37:00) [6]
преобразуй в битмап и выполни поворот - в NT-семействе SetWorldTransform, в Вин9X - вручную поточечно