Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.14;
Скачать: CL | DM;

Вниз

Вращение 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



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

Текущий архив: 2002.01.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
3-42360
grab
2001-12-11 14:13
2002.01.14
заполнение БД данными из текстового файла


7-42581
harisma
2001-09-28 14:23
2002.01.14
dcu2pas


3-42335
handra
2001-12-10 11:22
2002.01.14
DBF через ADO


1-42449
Mitrofan
2001-12-24 19:28
2002.01.14
Быстрое преобразование Фурье


1-42472
ASP
2001-12-25 14:14
2002.01.14
Как поймать окончание изменения размера формы