Rotation de Bitmap -> ScanLine
:salut: à tous :!:
Voilà j'ai récupérer ce code sur ******* mais je n'arrive pas à l'utiliser ... :roll: :cry: :oops:
voilà si vous pouviez m'expliquer un peu :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| 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; |
Citation:
pour le lancer:
2 images + un scrollbar (par exemple):
image2.picture.Bitmap:=SetImgAngle(scrollbar1.Position,image1.Picture.Bitmap)
C'est pour le lancer que j'ai un problème l'histoire du scrollbar j'ai un peu de mal :oops: j'ai essayer comme ceci mais en vain ... 8O j'ai un gros carré noir qui s'affiche :
Code:
1 2 3 4 5 6 7 8 9
| procedure TForm1.Button1Click(Sender: TObject);
var
img : TBitmap;
begin
img :=Tbitmap.Create;
img.LoadFromFile('c:\fleche.bmp');
form1.canvas.Draw(50,50,setImgAngle(30,img));
end; |
:merci: d'avance