Форум: "Основная";
Текущий архив: 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.007 c