Конференция "Игры" » Фильтр не работает для некоторый растров. [Delphi, Windows]
 
  • Студент (04.02.13 12:49) [0]
    Есть фильтр, который для примера, закрашивает
    все изображение в синий цвет:
    Это функция для pf24bit.


    procedure Effect(Bmp: TBitmap);
    type
     PRGB = ^TRGB;
     TRGB = record
       R, G, B: byte;
     end;.
    var
     i: LongWord;
     P: PRGB;
    begin
     P:= Bmp.Scanline[Bmp.Height - 1];
     For i:= 0 to (Bmp.Height * Bmp.Width - 1) do
     begin
       P.R:= 0;
       P.G:= 0;
       P.B:= 255;

       Inc(P);
     end;
    end;




    Работает отлично.
    Но для некоторый растров работает не корректно,
    они окрашиваются в горизонтальные полосы.
    Изменение PixelFormat'а не помогает.

    В чем может быть дело?

    Ссылка на растр, для которого фильтр работает некорректно: http://rusfolder.com/34835456
  • MBo © (04.02.13 15:09) [1]
    1. Фактическая длина строки битмапа всегда кратна 4 байтам. Твой код этого не учитывает.

    2. Строки битмапов могут идти как снизу вверх, так и наоборот. Второй случай также не учтён.

    Простейшее исправление - каждую строку обрабатывать отдельно.
  • Студент (07.02.13 22:19) [2]

    > MBo ©   (04.02.13 15:09) [1]


    Огромнейшее человеческое спасибо! :)
 
Конференция "Игры" » Фильтр не работает для некоторый растров. [Delphi, Windows]
Есть новые Нет новых   [134427   +38][b:0][p:0.001]