Статьи
|
Одной из основных задач любой графической программы является зеркальное отражение графики. Следующий совет показывает, как в Delphi реализовать зеркальное отражение по горизонтали растровое изображение.
Во-первых определим два типа:
type
TRGBArray = array[0..0] of TRGBTriple;
pRGBArray = ^TRGBArray;
Далее сам код:
procedure HorizontalReflection(const Bitmap: TBitmap);
var
i, j, w: Integer;
rowin, rowout: pRGBArray;
begin
w := Bitmap.Width*SizeOf(TRGBTriple);
GetMem(rowIn, w);
try
for j:= 0 to Bitmap.Height-1 do
begin
Move(Bitmap.Scanline[j]^, rowin^, w);
rowout := Bitmap.Scanline[j];
for i := 0 to Bitmap.Width-1 do
rowout[i] := rowin[Bitmap.Width-1-i];
end;
Bitmap.Assign(Bitmap);
finally
FreeMem(rowin);
end;
end;
Вызов этой процедуры будет выглядеть примерно так:
procedure TForm1.Button1Click(Sender: TObject);
begin
HorizontalReflection(Image1.Picture.Bitmap);
end;
|