Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Помогите!!!   Найти похожие ветки 

 
Laymer   (2006-05-30 07:36) [0]

Доброе время суток!!!!
Я взял из чужой программы кусочек кода. Для моей проги идеально подходит. В целом я понл как он работает работает, но кто - нить объясните подробней для чего каждая команда нужна.
Вот код
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;

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


 
antonn ©   (2006-05-30 10:59) [1]

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


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

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


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


> Don Nikola ©

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



Страницы: 1 вся ветка

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.049 c
2-1149239089
Trabl
2006-06-02 13:04
2006.06.18
Cannot focuse a disable or invisible window


2-1149096426
ZV
2006-05-31 21:27
2006.06.18
FileStream


1-1147354569
wisardo
2006-05-11 17:36
2006.06.18
Иконка экзешника.


2-1149154940
De
2006-06-01 13:42
2006.06.18
Почему не компелиться?


2-1148906451
Гуест
2006-05-29 16:40
2006.06.18
Как удалить все эдиты на форме?