Показать сообщение отдельно
  #1  
Старый 02.03.2008, 20:43
NeiL NeiL вне форума
Прохожий
 
Регистрация: 29.11.2007
Сообщения: 28
Репутация: 10
По умолчанию Помогите найти ошибку

Господа программисты, помогите найти ошибку (graphics32).
Процедура особым способом проверяет пикселы bitmapa и в случае если цвет пикселя bitmapa совпадает с выбранным цветом (FColor) тогода закрашиваем его (пиксел) в красный цвет ( цвет с которым будем сравнивать храниться в переменной FColor (кстати цвет грузится в переменную из этого же bitmapa)).
Исходя из этого получается что хотябы один пиксел в любом случае будет совпадать. Но почемуто этого не происходит. Помогите решить проблему.

Код:
procedure RecursiveFill(AX, AY: Integer);
     procedure NeedFillPixel(X, Y: Integer);
     var
       B: Integer;
       P: PPoint;
       C: TColor32;
     begin
       B := Y * BitsWidth + X;
       if (X >= 0) and (X < BitsWidth) and
          (Y >= 0) and (Y < BitsHeight)
         and (BitMask[b] = #00) then
         begin
           BitMask[b] := #01;  // Где-то здесь как мне кажется возникает ошибка
//**********************************************************************
           C := NewBitmap.Pixel[X, Y];
           if RGB(TColor32Entry(FColor).R, TColor32Entry(FColor).G, TColor32Entry(FColor).B)
                = RGB(TColor32Entry(C).R
                    ,TColor32Entry(C).G, TColor32Entry(C).B) then
//**********************************************************************
           begin
              NewBitmap.Pixel[X, Y] := clRed32;
             GetMem(P, SizeOf(TPoint));
             P^.X := X;
             P^.Y := Y;
             Stack.Push(P);
           end;
         end;
     end;
   var
     P: PPoint;
   begin
     NeedFillPixel(AX, AY);
     with Stack do
       while Count > 0 do
       begin
         P := PPoint(Pop(True));
         try
           with P^ do
           begin
             NeedFillPixel(X + 1, Y);
             NeedFillPixel(X, Y + 1);
             NeedFillPixel(X - 1, Y);
             NeedFillPixel(X, Y - 1);
           end;
         finally
           FreeMem(P, SizeOf(TPoint));
         end;
       end;
   end;
Ответить с цитированием