Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Добавление шума

01.01.2007
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Добавление шума в изображение
 
Зависимости: Graphics
Автор:       Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright:   Автор Федоровских Николай
Дата:        5 июня 2002 г.
***************************************************** }
 
procedure
AddNoise(Bitmap: TBitmap; Amount: Integer; Mono: Boolean);
{Если Mono = False, то точки цветные, иначе - чёрно-белые.
 
Процедура взята из библиотеки FastLIB и немного переделана}
 
 
function BLimit(B: Integer): Byte;
 
begin
   
if B < 0 then
     
Result := 0
   
else if B > 255 then
     
Result := 255
   
else
     
Result := B;
 
end;
 
type
  TRGB
= record
    B
, G, R: Byte;
 
end;
  pRGB
= ^TRGB;
var
  x
, y, i, a: Integer;
 
Dest: pRGB;
begin
 
Bitmap.PixelFormat := pf24Bit;
 
Randomize;
  i
:= Amount shr 1;
 
if Mono then
   
for y := 0 to Bitmap.Height - 1 do
   
begin
     
Dest := Bitmap.ScanLine[y];
     
for x := 0 to Bitmap.Width - 1 do
     
begin
        a
:= Random(Amount) - i;
       
with Dest^ do
       
begin
          r
:= BLimit(r + a);
          g
:= BLimit(g + a);
          b
:= BLimit(b + a);
       
end;
       
Inc(Dest);
     
end;
   
end
 
else
   
for y := 0 to Bitmap.Height - 1 do
   
begin
     
Dest := Bitmap.ScanLine[y];
     
for x := 0 to Bitmap.Width - 1 do
     
begin
       
with Dest^ do
       
begin
          r
:= BLimit(r + Random(Amount) - i);
          g
:= BLimit(g + Random(Amount) - i);
          b
:= BLimit(b + Random(Amount) - i);
       
end;
       
Inc(Dest);
     
end;
   
end;
end;

Пример использования:

AddNoise(FBitmap, 65, False);