![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите!!! [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]ну и что он делает? ;)