Rotation de +/- 90° sur un bitmap

Contenu du snippet

On utilisa ici la fameuse fonction scanline -- :-) --
En se qui concerne les dimensions, vue que l'on fait des rotations de 90 ° la longueur devient largeur et inversement.

Source / Exemple :


// Procedure permettant de faire une rotation de 90 ou de -90°
procedure Rotation (angle : integer ; PictureSource, PictureCible : TPicture);
type
  TRGBArray = ARRAY[0..10000] of TRGBTriple;
  pTRGBArray = ^TRGBArray;
  TArrayLigneCible = Array[0..10000] of pTRGBArray;

var
  BitmapSource, BitmapCible : TBitmap;
  x,y : integer;
  LigneSource, LigneCible : pTRGBArray;

begin

  BitmapSource := TBitmap.Create;
  BitmapCible := TBitmap.Create;

  try
    BitmapSource.assign (PictureSource.Graphic);
    BitmapSource.pixelformat := pf24bit;
    BitmapCible.pixelformat := pf24bit;

    BitmapCible.Height := BitmapSource.Width;
    BitmapCible.Width := BitmapSource.Height;

    for y:=0 to BitmapSource.Height - 1 do
    begin
      LigneSource := BitmapSource.ScanLine[y];
      for x:=0 to BitmapSource.Width - 1 do
      begin
        if (angle > 0) then
        begin
          LigneCible := BitmapCible.ScanLine[x];
          LigneCible[BitmapSource.Height - 1 - y] := LigneSource[x];
        end
	      else
        begin
          LigneCible := BitmapCible.ScanLine[BitmapSource.Width - x - 1];
          LigneCible[y] := LigneSource[x];
        end;
      end;
    end;
    PictureCible.assign(BitmapCible);
  finally
    BitmapSource.free;
    BitmapCible.free;
  end;
end;

Conclusion :


Maintenant si ceci ne vous suffit pas regardez se que Michel Bardou a fait, et un petit cours sur les scanline dans les tutoriaux de developpez.com/delphi

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.