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

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

Помогите!!! [Delphi, Windows]


Laymer ©   (2006-05-30 07:36:00) 

Доброе время суток!!!!
Я взял из чужой программы кусочек кода. Для моей проги идеально подходит. В целом я понл как он работает работает, но кто - нить объясните подробней для чего каждая команда нужна.
Вот код
procedure TMain.DrawMove(Cnv: TCanvas; x, y, Width1, Height1: Integer;
 Bmp: TBitmap; xsrs1, ysrs1: integer; clTransparent: TColor);
var bmpXOR, bmpAND, bmpINVAND, bmpTarget: TBitmap;
   oldcol: Longint;
begin
 try
   bmpAND := TBitmap.Create;
   bmpAND.Width := Bmp.Width;
   bmpAND.Height := Bmp.Height;
   bmpAND.Monochrome := True;
   oldcol := SetBkColor(Bmp.Canvas.Handle, ColorToRGB(clTransparent));
   BitBlt(bmpAND.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY);
   SetBkColor(Bmp.Canvas.Handle, oldcol);

   bmpINVAND := TBitmap.Create;
   bmpINVAND.Width := Bmp.Width;
   bmpINVAND.Height := Bmp.Height;
   bmpINVAND.Monochrome := True;
   BitBlt(bmpINVAND.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpAND.Canvas.Handle, 0, 0, NOTSRCCOPY);

   bmpXOR := TBitmap.Create;
   bmpXOR.Width := Bmp.Width;
   bmpXOR.Height := Bmp.Height;
   BitBlt(bmpXOR.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY);
   BitBlt(bmpXOR.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpINVAND.Canvas.Handle, 0, 0, SRCAND);

   bmpTarget := TBitmap.Create;
   bmpTarget.Width := Width1;
   bmpTarget.Height := Height1;

   BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Cnv.Handle, x, y, SRCCOPY);
   BitBlt(bmpTarget.Canvas.Handle, 0, 0, Width1, Height1, bmpAND.Canvas.Handle, xsrs1, ysrs1, SRCAND);
   BitBlt(bmpTarget.Canvas.Handle, 0, 0, Width1, Height1, bmpXOR.Canvas.Handle, xsrs1, ysrs1, SRCINVERT);
   BitBlt(cnv.Handle, x, y, Bmp.Width, Bmp.Height, bmpTarget.Canvas.Handle, 0, 0, SRCCOPY);

 finally
   bmpXOR.Free;
   bmpAND.Free;
   bmpINVAND.Free;
   bmpTarget.Free;

 end;
end;

Заранее спасибо!!!


Laymer   (2006-05-30 13:06:00) [1]


> Don Nikola ©

Спасибо!!!! Правдо предстоит помучится разобратся во всем этом!!!


Don Nikola   (2006-05-30 12:28:00) [2]

Я могу ошибаться, но подобное извращение похоже на отрисовку битмапа с колоркеем.
Могу посоветовать только одно, если нужно просто 2d не в окне, то переходи на directdraw или используй свои собственные процедуры отрисовки, если сделать с умом, то будет в разы быстрее и можно будет в окне работать.
Например: http://miek.narod.ru- SpriteUtils2, свои поделки мне лень в инет выкладывать.


antonn   (2006-05-30 10:59:00) [3]

ну и что он делает? ;)


Наверх

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