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

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

Работа с битовыми масками.


Страницы:   1 2

Riply ©   (2008-01-22 16:06:00) 

Здравствуйте !
Допустим, у нас есть две битовые маски.
Нам надо их сравнить и, если они различны, то выкинуть из каждой
те биты, которые есть в другой. Т.е. оставить только "отличающиеся".
У меня вот что получилось:
function DeleteEqualBits(const pBitMap1, pBitMap2: PRTL_BITMAP): DWord;
var
i: integer;
DWordCount, Tmp: DWord;
pdw1, pdw2: PULONG;
begin
Result := 0;
DWordCount := min(pBitMap1.SizeOfBitMap, pBitMap2.SizeOfBitMap) div 8;
if DWordCount > 0 then
 begin
  pdw1 := pBitMap1.Buffer;
  pdw2 := pBitMap2.Buffer;
  for i := 0 to Pred(DWordCount) do
   if pdw1^ <> pdw2^ then
    begin
     Tmp := pdw1^ xor pdw2^;
     pdw1^ := pdw1^ and Tmp;
     pdw2^ := pdw2^ and Tmp;
     inc(Result);
    end;
 end;
end;

Помогите, пожалуйста оптимизировать это безобразие,
если, конечно, оно того заслуживает :)


Семеныч   (2008-01-22 16:15:00) [21]

1. Делаем третью маску: Mask3 := Mask1 xor Mask2
2. Mask1 := Mask1 and Mask3; Mask2 = Mask2 and Mask3

===========

Под xor и and понимаются режимы работы BitBlt.


homm   (2008-01-22 16:12:00) [22]

> [0] Riply ©   (22.01.08 16:06)
> Нам надо их сравнить и, если они различны, то выкинуть из
> каждой те биты, которые есть в другой.

Не понятно, что значит выкинуть? Бит может быть установлен и сброшен.


Rouse_   (2008-01-22 16:12:00) [23]

Тезка, а тебе не кажется что ты ксоришь только первые 4 байта масок в цикле? :)


DVM   (2008-01-22 16:09:00) [24]


> Riply ©

PRTL_BITMAP у меня нет такого типа - это откуда?


Страницы:   1 2

Наверх

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