type
TMoveStyle = (msAll, msBack);
procedure MoveBitmap(Src, Dest: TBitmap; Hor, Ver: Integer; Style: TMoveStyle; BackColor: TColor);
var x, y: Integer;
begin
if (Hor = 0) and (Ver = 0) then Exit;
Dest.Width := Src.Width;
Dest.Height := Src.Height;
Dest.PixelFormat := Src.PixelFormat;
Dest.Transparent := False;
if Style = msBack then
with Dest.Canvas do begin
Brush.Style := bsSolid;
Brush.Color := BackColor;
FillRect(Rect(0, 0, Dest.Width, Dest.Height));
end;
if Style = msAll then begin
if Hor > 0 then x := Hor - Dest.Width
else x := Dest.Width + Hor;
if Ver > 0 then y := Ver - Dest.Height
else y := Dest.Height + Ver;
if (x <> 0) and (y <> 0) then Dest.Canvas.Draw(x, y, Src);
Dest.Canvas.Draw(Hor, y, Src);
Dest.Canvas.Draw(x, Ver, Src);
end;
Dest.Canvas.Draw(Hor, Ver, Src);
end;
Src - исходное изображение
Dest - результат
Hor, Ver - число пикселей, на которое будет смещение по горизонтали и вертикали
Style - тип фона: msBack - фон закрашивается цветом BackColor, msAll - смещение происходит с перелезанием конца в начало и низа вверх, либо наоборот.
Выдернуто из старющего проекта, поэтому немного нелогично :)