Skalowanie procentowe
function Skalowanie_procentowe(bitmapa1, bitmapa2: TBitmap; procent: Integer): Boolean;
var
TmpBmp: TBitmap;
ARect: TRect;
h, w: Real;
hi, wi: Integer;
begin
Result := False;
try
TmpBmp := TBitmap.Create;
try
h := bitmapa1.Height * (procent / 100);
w := bitmapa1.Width * (procent / 100);
hi := StrToInt(FormatFloat('#', h)) + bitmapa1.Height;
wi := StrToInt(FormatFloat('#', w)) + bitmapa1.Width;
TmpBmp.Width := wi;
TmpBmp.Height := hi;
ARect := Rect(0, 0, wi, hi);
TmpBmp.Canvas.StretchDraw(ARect, bitmapa1);
bitmapa2.Assign(TmpBmp);
finally
TmpBmp.Free;
end;
Result := True;
except
Result := False;
end;
end;
i sposób użycia
// zmniejszenie obrazka o 70 procent
procedure TForm1.Button1Click(Sender: TObject);
begin
Skalowanie_procentowe(Image1.Picture.Bitmap, Image2.Picture.Bitmap, -70);
end;
Odbicia
procedure Odbij_w_poziomie(Image:TImage32);
var i,j,kolor:integer;
begin
for i := 0 to (Image.Bitmap.Height-1) do
for j:= 0 to (Image.Bitmap.Width div 2)-1 do
begin
kolor:=Image.Bitmap.Canvas.Pixels[j,i];
Image.Bitmap.Canvas.Pixels[j,i]:=Image.Bitmap.Canvas.Pixels[Image.Bitmap.Width-1-j,i];
Image.Bitmap.Canvas.Pixels[Image.Bitmap.Width-1-j,i]:=kolor;
end;
end;
procedure Odbij_w_pionie(Image:TImage32);
var i,j,kolor:integer;
begin
for i := 0 to (Image.Bitmap.Height div 2)-1 do
for j:= 0 to (Image.Bitmap.Width-1) do
begin
kolor:=Image.Bitmap.Canvas.Pixels[j,i];
Image.Bitmap.Canvas.Pixels[j,i]:=Image.Bitmap.Canvas.Pixels[j,Image.Bitmap.Height-1-i];
Image.Bitmap.Canvas.Pixels[j,Image.Bitmap.Height-1-i]:=kolor;
end;
end;
Obroty
procedure Obroc_o_90_w_lewo(Image, Image2:TImage32);
var i,j:integer;
wysokosc,szerokosc:integer;
begin
wysokosc:=Image.Bitmap.Height;
szerokosc:=Image.Bitmap.Width;
Image.Bitmap.Height:=szerokosc;
Image.Bitmap.Width:=wysokosc;
for j:= 0 to (Image2.Bitmap.Width-1) do
for i := 0 to (Image2.Bitmap.Height-1) do
Image.Bitmap.Canvas.Pixels[i,Image.Bitmap.Height-1-j]:=Image2.Bitmap.Canvas.Pixels[j,i];
end;
procedure Obroc_o_90_w_prawo(Image, Image2:TImage32);
var i,j:integer;
wysokosc,szerokosc:integer;
begin
wysokosc:=Image.Bitmap.Height;
szerokosc:=Image.Bitmap.Width;
Image.Bitmap.Height:=szerokosc;
Image.Bitmap.Width:=wysokosc;
for j:= 0 to (Image2.Bitmap.Width-1) do
for i := 0 to (Image2.Bitmap.Height-1) do
Image.Bitmap.Canvas.Pixels[Image.Bitmap.Width-1-i,j]:=Image2.Bitmap.Canvas.Pixels[j,i];
end;
procedure TForm1.Obroc_o_dowolny_kat(Image, Image2:TImage32; kat:double);
var i,j,kolor:integer;
srodek_x,srodek_y,X,Y,X1,Y1:integer;
roznica_x,roznica_y:integer;
tablica_punktow:array of array of byte;
r1,r2,r3,r4,r5,r6,r7,r8:integer;
g1,g2,g3,g4,g5,g6,g7,g8:integer;
b1,b2,b3,b4,b5,b6,b7,b8:integer;
r_srednie,g_srednie,b_srednie:integer;
kolor_sasiada:TColor;
ilosc:integer;
begin
srodek_x:=Image2.Bitmap.Width div 2;
srodek_y:=Image2.Bitmap.Height div 2;
roznica_y:=(Image.Height-Image2.Bitmap.Height)div 2;
roznica_x:=(Image.Width-Image2.Bitmap.Width)div 2;
Image.Bitmap.Height:=Image.Height;
Image.Bitmap.Width:=Image.Width;
setlength(tablica_punktow,Image.Bitmap.Height,Image.Bitmap.Width);
for j:= 0 to (Image.Bitmap.Width-1) do
for i := 0 to (Image.Bitmap.Height-1) do
tablica_punktow[j,i]:=0;
for j:= 0 to (Image.Bitmap.Width-1) do
for i := 0 to (Image.Bitmap.Height-1) do
Image.Bitmap.Pixels[j,i]:=clWhite;
for j:= 0 to (Image2.Bitmap.Width-1) do
for i := 0 to (Image2.Bitmap.Height-1) do
begin
kolor:=Image2.Bitmap.PixelS[j,i];
X:=j + roznica_x;
Y:=i + roznica_y;
X:=X - srodek_x;
Y:=Y - srodek_y;
X1:=round(X*cos(kat)-Y*sin(kat));
Y1:=round(X*sin(kat)+Y*cos(kat));
X1:=X1 + srodek_x;
Y1:=Y1 + srodek_y;
Image.Bitmap.PixelS[X1,Y1]:=kolor;
if (X1<=Image.Bitmap.Height-1) and (X1>=0) and (Y1>=0) and (y1<=Image.Bitmap.Width-1) then
tablica_punktow[x1,y1]:=1;
end;
for j:= 1 to (Image.Bitmap.Width-2) do
for i := 1 to (Image.Bitmap.Height-2) do
begin
if (tablica_punktow[j,i]=0) then
begin
r1:=0;r2:=0;r3:=0;r4:=0;r5:=0;r6:=0;r7:=0;r8:=0;
g1:=0;g2:=0;g3:=0;g4:=0;g5:=0;g6:=0;g7:=0;g8:=0;
b1:=0;b2:=0;b3:=0;b4:=0;b5:=0;b6:=0;b7:=0;b8:=0;
ilosc:=0;
if tablica_punktow[j-1,i-1]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j-1,i-1];
r1:=getRvalue(kolor_sasiada);
g1:=getGvalue(kolor_sasiada);
b1:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j-1,i]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j-1,i];
r2:=getRvalue(kolor_sasiada);
g2:=getGvalue(kolor_sasiada);
b2:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j-1,i+1]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j-1,i+1];
r3:=getRvalue(kolor_sasiada);
g3:=getGvalue(kolor_sasiada);
b3:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j+1,i-1]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j+1,i-1];
r4:=getRvalue(kolor_sasiada);
g4:=getGvalue(kolor_sasiada);
b4:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j+1,i]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j+1,i];
r5:=getRvalue(kolor_sasiada);
g5:=getGvalue(kolor_sasiada);
b5:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j+1,i+1]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j+1,i+1];
r6:=getRvalue(kolor_sasiada);
g6:=getGvalue(kolor_sasiada);
b6:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j,i-1]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j,i-1];
r7:=getRvalue(kolor_sasiada);
g7:=getGvalue(kolor_sasiada);
b7:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if tablica_punktow[j,i+1]<>0 then
begin
kolor_sasiada:=Image.Bitmap.Pixels[j,i+1];
r8:=getRvalue(kolor_sasiada);
g8:=getGvalue(kolor_sasiada);
b8:=getBvalue(kolor_sasiada);
ilosc:=ilosc+1;
end;
if ilosc>=5 then
begin
r_srednie:=(r1+r2+r3+r4+r5+r6+r7+r8) div ilosc;
g_srednie:=(g1+g2+g3+g4+g5+g6+g7+g8) div ilosc;
b_srednie:=(b1+b2+b3+b4+b5+b6+b7+b8) div ilosc;
kolor_sasiada:=RGB(r_srednie,g_srednie,b_srednie);
Image.Bitmap.Pixels[j,i]:=kolor_sasiada
end;
end;
end;
end;
</delphi.