Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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



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

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

Наверх









Память: 0.84 MB
Время: 0.023 c
1-42409
Елена
2001-12-24 00:40
2002.01.14
Help!


1-42498
Alan
2001-12-25 19:16
2002.01.14
Проблемка с постоянным отображением подсказки


3-42374
Kirill
2001-12-10 13:42
2002.01.14
Zeos Help+Doc


1-42455
Electric
2001-12-24 05:28
2002.01.14
Как нажатием кнопки на своей форме прервать цикл


14-42555
Димон
2001-11-17 20:58
2002.01.14
Вопрос по Перлу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский