Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Вниз

Вращение TImage 


Smok_er   (2001-12-20 04:37) [0]

Необходимо в рантайме вращать Image. Подстажите, плиз, как это сделать... Может компоненты для этого какие-то существуют...



Smok_er   (2001-12-20 17:58) [1]

Ну неужели никто не знает, как отобразить TImage под углом, к примеру, 45 градусов?



Serg5   (2001-12-20 18:29) [2]

Легко, библиотека ImageLib, там всё есть. Библиотека эта встречается на www.torry.net, или ещё много бесплатных.
А если сам хочешь написать то для начала возьми прямоугольник, и его четыре вершины отследи во времени по какому нибудь закону. В данном случае вращении, значит от центра отсчитывай в градусах, стирай старую, перерисовывай в смащении, и т. далее. Не знаю, может и получится очень тормознуто, зато железно. А картинка похоже значит будет. Только там надо брать каждый пиксель :( Может меня поправят.



Leshuz   (2001-12-22 18:59) [3]

Torry, конечно, хорошо, а где бесплатные то взять?
Буду очень благодарен за подсказку.



vbazik   (2001-12-24 15:24) [4]

Посмотри на данном форуме, а именно:

Тут еще такой вопросец возник трансформирование Bitmap"ov
(Kost 23.12.01 16:29)
[D6, Win2k] » Как повернуть Bitmap на заданный угол?



vbazik   (2001-12-24 15:27) [5]

P.S. Правда оговорюсь - для runtime (если я его правильно понимаю) будет тяжеловато ;)



Nikolay   (2001-12-24 15:39) [6]

2Serg5
еще ScanLine можно

2Smok_er
скачай бибиотеку DelphiX
http:///www.yks.ne.jp/~hori/

Вот так!(с)



MBo   (2001-12-24 15:41) [7]

В Win2K поддерживается вращение. Начни с
SetWorldTransform



MBo   (2001-12-25 13:29) [8]

а в Win98 получилось так (пока только для TrueColor - c другими надо с палитрой возиться, но из них легче всего с 256 цветами)
поворачивает отн. центра исходной картинки (легко изменить),
угол в градусах.

function TForm1.BmpRot(const B: TBitmap;fi:integer):TBitmap;
type
TRGBTripleArray = array[0..1023] of TRGBTriple;
pRGBTripleArray = ^TRGBTripleArray;
var
x0,y0,i,j,x1,y1,x11,y11,x2,y2:integer;
ht,wd,newht,newwd:integer;
cfi,sfi: double;
sline1,sline2: pRGBTRipleArray;
BEGIN
sfi:=sin(degtorad(fi));
cfi:=cos(degtorad(fi));
ht:=b.height;
wd:=b.width;
newwd:=abs(round(ht*sfi))+abs(round(wd*cfi));
newht:=abs(round(wd*sfi))+abs(round(ht*cfi));
Result:=TBitmap.create;
Result.Width:=newwd;
Result.Height:=newht;
Result.PixelFormat:=pf24bit;
x0:=wd div 2;
y0:=ht div 2;
for j :=newht-1 downto 0 do begin
sline2 := Result.scanline[j];
y1:= 2*(j-(newht-ht) div 2 -y0)+1;
for i := newwd-1 downto 0 do begin
x1:=2*(i-(newwd-wd) div 2 -x0)+1;
x2 :=round(x1 * cfi - y1 * sfi);
y2 :=round(x1 * sfi + y1 * cfi);
x11:=(x2-1) div 2 +x0;
y11:=(y2-1) div 2 +y0;
if (x11>=0)and(x11<wd)and(y11>=0)and(y11<ht) then begin
sline1 := b.scanline[y11];
sline2[i] := sline1[x11];
end;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var b:tbitmap;
begin
b:=tbitmap.create;
b.LoadFromFile("e:\4.bmp");
image1.Picture.assign(BmpRot(b,-30));
b.free;
end;



MBo   (2001-12-25 13:43) [9]

а здесь, как в NT крутить (1-й пример). На Сях, но очень просто, с использованием SetWorldTransform, как я уже писал. NT нет, так что не проверял.
http://www.codeguru.com/bitmap/rotate_bitmap.shtml




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.083 c
6-42528           Робот                 2001-10-18 16:09  2002.01.14  
Нужен почтовый робот,


1-42416           SergeyVP              2001-12-27 06:21  2002.01.14  
Thread


1-42431           -=Phantom=-           2001-12-23 22:28  2002.01.14  
Проблема следующая:


1-42469           Аль                   2001-12-25 12:49  2002.01.14  
Подскажите, как справится с


1-42514           Grigory               2001-12-26 10:09  2002.01.14  
Коллизии потоков