Главная страница
    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.46 MB
Время: 0.008 c
7-42577
Максим
2001-10-01 10:44
2002.01.14
Железо и софт


4-42629
Pal-nod
2001-11-15 17:56
2002.01.14
Где можно найти в РУНЕТЕ нормальное


1-42519
Andrey196
2001-12-26 16:15
2002.01.14
Как из события одново компонента вызвать событие другово компонета


3-42342
Holms
2001-12-10 17:36
2002.01.14
Больший проблемы


14-42553
paul_shmakov
2001-11-19 15:10
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский