Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-28558
Viking
2001-11-08 19:44
2002.01.10
Сворачивание окна


14-28544
Abajun
2001-11-16 09:38
2002.01.10
Шифровка


3-28435
AlexNord
2001-12-10 06:08
2002.01.10
BatchMove


1-28475
Starkom
2001-12-17 12:30
2002.01.10
Вопрос о существовании сборщика мусора


7-28547
harisma
2001-09-24 15:14
2002.01.10
Открытие и работа с портами в Win2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский