![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как повернуть TBitMap на 180 градусов, быстро ? [D7]
Pics © (2005-11-04 02:10:00)Кстати, может есть какие удобные библиотеки с эффектами, для обработки картинок?
Antonn (2005-11-07 05:27:00) [1]Crazy_Diman © (06.11.05 23:01) [11]
мне твой метод не понравился слишком он тормозит
он более универсальный, и расчетом там побольше...
Fenik © (06.11.05 19:08) [10]
Кто бы сомневался :)))
ну не у всех же:)
Crazy_Diman (2005-11-06 23:01:00) [2]Antonn
мне твой метод не понравился слишком он тормозит
Fenik
я твой мне понравился только есть несколько недостатков ну это не так трудно переделать
Fenik (2005-11-06 19:08:00) [3]> Antonn © (05.11.05 13:53) [7]
> кстати, я на своем модуле игру написал, у некоторых тормозит:)
Кто бы сомневался :)))
Crazy_Diman (2005-11-05 20:25:00) [4]Рисунок 3000x3000 повернул на 90-270 за 4000 ms
Crazy_Diman (2005-11-05 18:41:00) [5]вот на написал может пригадится поворот Изоброжения в лево или в право на 90 градусов
procedure Rotate90left(
const SourceImage : Tbitmap;
const DestImage : Tbitmap );
var
RowProcessed, TargetRow :pRGBArray;
X, Y : LongInt;
SourceWidth : LongInt;
SourceHeight : LongInt;
begin
SourceImage.PixelFormat:= pf24bit;
SourceWidth := SourceImage.Width;
SourceHeight := SourceImage.Height;
DestImage.Width :=SourceImage.Height;
DestImage.Height :=SourceImage.Width;
DestImage.PixelFormat:= pf24bit;
for Y := 0 to (SourceHeight-1) do
begin
RowProcessed:=SourceImage.ScanLine[Y];
for X := 0 to (SourceWidth-1) do
begin
TargetRow:=DestImage.ScanLine[SourceWidth-1-x];
TargetRow^[Y] := RowProcessed^[x] ;
end;
end;
end;
procedure Rotate90right(
const SourceImage : Tbitmap;
const DestImage : Tbitmap );
var
RowProcessed, TargetRow :pRGBArray;
X, Y : LongInt;
SourceWidth : LongInt;
SourceHeight : LongInt;
begin
SourceImage.PixelFormat:= pf24bit;
SourceWidth := SourceImage.Width;
SourceHeight := SourceImage.Height;
DestImage.Width :=SourceImage.Height;
DestImage.Height :=SourceImage.Width;
DestImage.PixelFormat:= pf24bit;
for Y := 0 to (SourceHeight-1) do
begin
RowProcessed:=SourceImage.ScanLine[SourceHeight-Y-1];
for X := 0 to (SourceWidth-1) do
begin
TargetRow:=DestImage.ScanLine[x];
TargetRow^[Y] := RowProcessed^[x] ;
end;
end;
end;
Antonn (2005-11-05 13:53:00) [6]кстати, я на своем модуле игру написал, у некоторых тормозит:)
Fenik (2005-11-05 13:37:00) [7]Взять прицип из [4] + http://www.delphimaster.ru/articles/pixels/index.html- будет универсально и ещё быстрее.
Crazy_Diman (2005-11-05 02:13:00) [8]Рисунок 3000x3000 повернул за 375 ms
Crazy_Diman (2005-11-05 01:59:00) [9]
CONST
PixelCountMax = 32768;
TYPE
pRGBArray = ^TRGBArray;
TRGBArray = ARRAY[0..PixelCountMax-1] OF TRGBTriple;
procedure Rotate180(
const SourceImage : Tbitmap;
const DestImage : Tbitmap );
var
RowProcessed, TargetRow :pRGBArray;
X, Y : LongInt;
SourceWidth : LongInt;
SourceHeight : LongInt;
begin
SourceImage.PixelFormat:= pf24bit;
SourceWidth := SourceImage.Width;
SourceHeight := SourceImage.Height;
DestImage.Width :=SourceWidth;
DestImage.Height :=SourceHeight;
DestImage.PixelFormat:= pf24bit;
for Y := 0 to (SourceHeight-1) do
begin
TargetRow:=DestImage.ScanLine[SourceHeight-1-Y];
RowProcessed:=SourceImage.ScanLine[Y];
for X := 0 to (SourceWidth-1) do
begin
TargetRow^[(SourceWidth-1)-X] := RowProcessed^[x] ;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Rotate180(Image1.Picture.Bitmap,Image2.Picture.Bitmap);
end;
PZ (2005-11-04 07:38:00) [10]Посмотри http://delphiworld.narod.ru/
5000 статей - там есть
Antonn (2005-11-04 04:37:00) [11]глянь сюды:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1130193018&n=9
ппп (2005-11-04 04:34:00) [12]//может есть какие удобные библиотеки с эффектами, для обработки картинок?
fastdib proeffectimage jandraw
ни как нельзя повернуть Tbitmap на 180 градусов, быстро