Форум: "Основная";
Поиск по всему сайту: 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.027 c
1-42412           RoadRunner            2001-12-26 17:17  2002.01.14  
Проблема с записью в файл


4-42620           Севостьянов Игорь     2001-11-14 11:58  2002.01.14  
Кто-нибудь работал с ReadEventLog ?


1-42434           som                   2001-12-24 10:12  2002.01.14  
Графика


1-42405           Andrey196             2001-12-26 18:48  2002.01.14  
Как в строку добавить значок


1-42501           dva                   2001-12-25 23:03  2002.01.14  
Помогите чайнику с Таймером