Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как повернуть 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 градусов, быстро


Наверх

Титульная страница Поиск, карта сайта Написать письмо