Форум: "Основная";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];
ВнизТут еще такой вопросец возник трансформирование Bitmap ov Найти похожие ветки
← →
vbazik (2001-12-23 16:27) [1]procedure povorot(Im1 ,Im2: TBitmap ;xc,yc,angle:double);
// xc,yc-координаты центра вращения,
//angle-угол в радианах
function Pixel_Size(Im : TBitmap ): byte ;// Возвращает размер пиксела
//картинки в байтах
var
pix_size : byte ;
begin
case Im.PixelFormat of
pf24bit: pix_size := 3 ;
pf8bit : pix_size := 1 ;
pf16bit : pix_size := 2 ;
pf32bit : pix_size := 4 ;
else
pix_size:= 0 ;
end;
Pixel_Size := pix_size ;
end;
procedure RotateXY(xc,yc,angle:double;var x,y :integer );
var
tmp : double ;
x_ ,y_ : double ;
cos_ ,sin_ : double ;
begin
x_ := x - xc ;
y_ := y - yc ;
tmp := x_ ;
asm // ASM-код для одновременного вычисления SIN(angle) и COS(angle)
fld angle ; // на арифметическом сопроцессоре 80Х87
fsincos ; // <---- Ф-ция вычисления SIN/COS (angle)
fstp cos_ ;// cos_ := cos(angle);
fstp sin_ ;// sin_ := sin(angle) ;
end;
x_ := x_ * cos_ - y_ * sin_ ;
y_ := y_ * cos_ + tmp * sin_ ;
x := round(x_ + xc );
y := round(y_ + yc );
end;//proc RotateXY
procedure find_offset
(Im :TBitmap ; xc,yc,angle :double ;var xoff , yoff , xw , yh :integer);
// процедура find_offset определяет размер повёрнутой картинки
// (xc , yc) центр поворота angle - угол (в рад.) Im - исходная
// неповёрнутая картинка
// xoff u yoff определяют насколько надо сместить неповёрнутую
// картинку что бы она "вписалась"в повёрнутую
// xw,yh габариты "повёрнутой" картинки
const
max_int = 32567 ;
var
i : integer ;
xrab,yrab : integer ;
xmin,ymin :integer ;
xmax,ymax :integer ;
begin
xmin := max_int ;
ymin := max_int ;
xmax := -max_int ;
ymax := -max_int ;
for i:= 1 to 4 do
begin
case i of
1: begin xrab := 0;yrab := 0 ; end;
2: begin xrab := 0 ; yrab := Im.Height ; end;
3: begin xrab := Im.Width ; yrab := 0 ; end;
4: begin xrab := Im.Width ; yrab := Im.Height ; end;
end;//case
//rotation calculation
RotateXY(xc,yc,angle, xrab , yrab ) ;
if xrab > xmax then xmax := xrab ;
if yrab > ymax then ymax := yrab ;
if xrab < xmin then xmin := xrab ;
if yrab < ymin then ymin := yrab ;
end;// for i
xoff := xmin ; ////////////////?
yoff := ymin ;
xw := xmax - xmin ;
yh := ymax - ymin ;
end; //proc Find_Offset
var // proc povorot
i , j , h , w ,ii ,i3: integer ;
x_int,y_int : longint ;
R , G , B ,Intens , size_ : byte ;
pntr : PBytearray ; // указатель на адреса памяти в кот. находится Im1
pntr2 : PBytearray ; // указатель на адреса памяти в кот. находится Im2
xoff,yoff : integer ;
xw,yh : integer ;
line_size1,line_size2 : integer ;// длина строк изображений Im1 , Im2 в байтах
index1 , index2 :integer;// определяет смещения от начала строк в Im1 , Im2
// соотв. в байтах
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c