Вниз
Скачать: CL | DM;

Rorate TImage with JPEG   Найти похожие ветки 

← →
Gimer ©   (2003-06-02 20:10) [0]

Здравия, ув. програмеры. Подскажите как можно повернуть TImage с *.jpg в нем на определенный угол? Или подскажите где копать, может пример где-нить у кого-нить есть? :) Зарание спасибо.


← →
Gimer ©   (2003-06-02 20:10) [1]

Извеняюсь за неточный вопрос, повернуть нужно не сам компонент а изображение в нем и потом сохранить его. Что-то вроде Rorate в Photoshop"e. Ну а если и такое нельзя, то может есть "левые" компоненты, что посоветуете? :)


← →
SunSB   (2003-06-11 04:04) [2]

procedure Rotate( var bmp: TBitmap; Angle: real );
var tmp : TBitmap;
var X, Y, cX, cY : integer;
var X1, Y1, cX1, cY1: integer;
var sinA, cosA: real;
begin
sinA := sin( Angle );
cosA := cos( Angle );
tmp := TBitmap.Create;
tmp.Width := trunc(sqrt( bmp.Width * bmp.Width + bmp.Height*bmp.Height));// R.Right;
tmp.Height:= tmp.Width; //R.Bottom;
tmp.Canvas.Brush.Color := 0;
tmp.Canvas.Pen.Color := 0;
tmp.Canvas.FillRect( bmpRect( tmp ));

cX := ( bmp.Width + 1 ) div 2; // центр старой
cY := ( bmp.Height + 1 ) div 2;

cX1:= ( tmp.Width + 1 ) div 2; // центр новой
cY1:= ( tmp.Height + 1 ) div 2;

for Y1 := 0 to tmp.Height-1 do
for X1 := 0 to tmp.Width-1 do begin
X := cX + trunc(((X1-cX1) * cosA) - ((Y1-cY1) * sinA));
Y := cY + trunc(((X1-cX1) * sinA) + ((Y1-cY1) * cosA));
tmp.Canvas.Pixels[ X1, Y1 ] := bmp.Canvas.Pixels[ X, Y ];
end;
bmp.Assign ( tmp );
bmp.Transparent := true;
bmp.TransparentColor := 0;
TruncateBMP( bmp );
( 5+ 5+5+5 )
procedure Rotate( var bmp: TBitmap; Angle: real );
var tmp : TBitmap;
var X, Y, cX, cY : integer;
var X1, Y1, cX1, cY1: integer;
var sinA, cosA: real;
begin
sinA := sin( Angle );
cosA := cos( Angle );
tmp := TBitmap.Create;
tmp.Width := trunc(sqrt( bmp.Width * bmp.Width + bmp.Height*bmp.Height));// R.Right;
tmp.Height:= tmp.Width; //R.Bottom;
tmp.Canvas.Brush.Color := 0;
tmp.Canvas.Pen.Color := 0;
tmp.Canvas.FillRect( bmpRect( tmp ));

cX := ( bmp.Width + 1 ) div 2; // центр старой
cY := ( bmp.Height + 1 ) div 2;

cX1:= ( tmp.Width + 1 ) div 2; // центр новой
cY1:= ( tmp.Height + 1 ) div 2;

for Y1 := 0 to tmp.Height-1 do
for X1 := 0 to tmp.Width-1 do begin
X := cX + trunc(((X1-cX1) * cosA) - ((Y1-cY1) * sinA));
Y := cY + trunc(((X1-cX1) * sinA) + ((Y1-cY1) * cosA));
tmp.Canvas.Pixels[ X1, Y1 ] := bmp.Canvas.Pixels[ X, Y ];
end;
bmp.Assign ( tmp );
bmp.Transparent := true;
bmp.TransparentColor := 0;
TruncateBMP( bmp );
tmp.Free;
end;


вращает, но помнится неважно. При последовательном повороте (5+ 5+5+5 ) накапливается ошибка, поэтому при использовании нужно хранить неповернутую картинку, и при последовательных поворотах в одну сторону, крутить её. Т.е. 5+5+5+5 = 5, 10, 15, 20.




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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.012 c
14-27676
Zhouck
2003-09-18 11:24
2003.10.09
ГИС , Делфи , Оракл


4-27788
Виктор
2003-08-04 21:08
2003.10.09
Как получить хэндел едита чужого окна?


1-27452
oens
2003-09-27 21:23
2003.10.09
Преобразование текстового файла в html


1-27435
Канарский
2003-09-28 12:47
2003.10.09
Принудительное закрытие файлов


6-27629
h@1f-e1f
2003-08-12 17:19
2003.10.09
Как сохранить страницу?




   Наверх