Rotation d'une image

Contenu du snippet

voila un ptit algorithme de rotation d'une image pompée d'une source sur vbfrance.com
Il n'est pas optimizée alors g besoin d'aide (2 seconde pour la rotation d'image, et c normalement pour un moteur 2D :s)

Source / Exemple :


function SetImgAngle(angle:integer; source:TBitmap):TBitmap;
var
n:integer;
Largeur,ecart:integer;
pi2:extended;
z:extended;
col_prov,lig_prov:integer;
i,j:integer;
couleur:DWord;
xx,yy,x,y:integer;
//Pour accelerer les chose: variable d'optimization
cz,sz:extended;
czpi,szpi:extended;
begin
n:=source.Width;
Largeur:= source.Width div 2;
result:=TBitmap.create;
result.Height:=300;result.Width:=300;//a changer;
ecart:= trunc((Sqrt(2*Sqr(n)) - n)/2);
pi2:= pi / 2;
z:= 0.01745 * angle;
x:=source.Width div 2;y:=source.Height div 2;
cz:=Cos(z);sz:=Sin(z);
czpi:=Cos(z + pi2);
szpi:=Sin(z + pi2);
For i:= -ecart To n + ecart do begin
    col_prov:= trunc(Largeur + ((i - Largeur) * cz));
    lig_prov:= trunc(Largeur + ((i - Largeur) * sz));
    For j:= -ecart To n + ecart do begin

        xx:=trunc(col_prov + ((j - Largeur) * czpi));
        yy:=trunc(lig_prov + ((j - Largeur) * szpi));
        Couleur:=source.Canvas.Pixels [xx,yy];

        If (Couleur <> -1) And (Couleur <> $FFFFFF) Then begin
            xx:=i + (X - Largeur);
            yy:=j + (Y - Largeur);
            result.Canvas.Pixels[xx,yy]:=Couleur
        end;
    end;
end;
end;

Conclusion :


pour le lancer:
2 images + un scrollbar (par exemple):
image2.picture.Bitmap:=SetImgAngle(scrollbar1.Position,image1.Picture.Bitmap)

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.