Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
15-1148562857
Вася Аникеев
2006-05-25 17:14
2006.06.18
Что делать, комп ругается?


15-1148645070
Логин
2006-05-26 16:04
2006.06.18
Удаленная работа


15-1148543894
Val (from Kiev)
2006-05-25 11:58
2006.06.18
Киевляне, посоветуйте - где купить картридер?


2-1148131495
ДЯМАК
2006-05-20 17:24
2006.06.18
алгоритм


15-1148392592
vidiv
2006-05-23 17:56
2006.06.18
как перехватит буфер обмена при вставки в richedit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский