|
Posledná zmena: 30.10.2002
|
bitmapy
|
Bitmapy
centrovanie
|
vycentrovanie obrázka obrazok.bmp
do Image1
|
var
bmp:TBitmap;
x,y:integer;
begin
bmp:=TBitmap.Create;
bmp.LoadFromFile('obrazok.bmp');
x:=(Image1.Width-bmp.Width)div 2;
y:=(Image1.Height-bmp.Height)div 2;
Image1.Canvas.Draw(x,y,bmp);
bmp.Free;
end;
|
opečiatkuj obrázok, ak sú známe
súradnice jeho stredu
|
procedure Draw2(x,y,bmp)
- na
pozíciu x,y grafickej plochy Image1
položiť obrázok (bmp)
tak, aby na tejto
pozícii bol stred obrázka
|
procedure Draw2(x,y:integer; bmp:TBitmap);
begin
Image1.Canvas.Draw(x-bmp.Width div 2,
y-bmp.Height div 2,
bmp);
end;
|
natiahnutie so zachovaním
pomeru strán
|
procedure natiahni(i:TImage; bmp:TBitmap)
-
StretchDraw aby sa zachoval pomer strán obrázka
bmp
možeme použiť max s knižnice Math,
t.j. muselo by byť uses Math;
zistite, ako sa zmení natiahnutie,
keď namiesto max použijeme min
|
procedure natiahni(i:TImage; bmp:TBitmap);
var
p,px,py:real;
r:TRect;
begin
px:=i.Width/bmp.Width;
py:=i.Height/bmp.Height;
p:=max(px,py);
r:=Rect(0,0,round(p*bmp.Width),round(p*bmp.Height));
i.Canvas.StretchDraw(r,bmp);
end;
|
obrázok v mriežke (v gride)
|
na ButtonClick:
opečiatkuje obrazok.bmp na
náhodnú pozíciu
v gride, pričom grid je podľa veľkosti obrázka
|
procedure TForm1.Button1Click(Sender: TObject);
var
bmp:TBitmap;
x,y,w,h:integer;
begin
bmp:=TBitmap.Create;
bmp.LoadFromFile('obrazok.bmp');
w:=Image1.Width div bmp.Width;
h:=Image1.Height div bmp.Height;
x:=random(w)*bmp.Width;
y:=random(h)*bmp.Height;
Image1.Canvas.Draw(x,y,bmp);
bmp.Free;
end;
|
šachovnica
|
dve bitmapy bmp1.bmp a bmp2.bmp sú
rovnako veľké - vykachličkovať šachovnicovo
|
var
bmp1,bmp2:TBitmap;
x,y:integer;
b1,b2:boolean;
begin
bmp1:=TBitmap.Create;
bmp1.LoadFromFile('bmp1.bmp');
bmp2:=TBitmap.Create;
bmp2.LoadFromFile('bmp2.bmp');
y:=0; b1:=true;
while y<Image1.Height do begin
x:=0; b2:=b1;
while x<Image1.Width do begin
if b2 then Image1.Canvas.Draw(x,y,bmp1)
else Image1.Canvas.Draw(x,y,bmp2);
inc(x,bmp1.Width); b2:=not b2;
end;
inc(y,bmp1.Height); b1:=not b1;
end;
bmp1.Free; bmp2.Free;
end;
|
najväčšia bitmapa
|
máme 8 bitmáp b1.bmp, b2.bmp
... b8.bmp
- najväčšiu z týchto bitmáp
treba vykresliť do Image1
- najväčšia nech je napr.
s najväčším súčinom širky
a výšky
|
var
bmp:TBitmap;
i,imax,suc,max:integer;
begin
bmp:=TBitmap.Create;
max:=0;
for i:=1 to 8 do begin
bmp.LoadFromFile('b'+IntToStr(i)+'.bmp');
suc:=bmp.Width*bmp.Height;
if suc>max then begin
max:=suc; imax:=i;
end;
end;
bmp.LoadFromFile('b'+IntToStr(imax)+'.bmp');
with Image4.Canvas do begin
Draw(0,0,bmp);
Font.Color:=clRed;
TextOut(0,0,
IntToStr(bmp.Width)+'x'+IntToStr(bmp.Height));
end;
bmp.Free;
end;
|
Ďalšie úlohy
- dané sú bitmapy b1.bmp, b2.bmp,
... bN.bmp - zistiť najväčšiu šírku
a najväčšiu výšku a potom v takomto
gride vykresliť všetky bitmapy do Image1, napr.
Image1 je 350x350, maximálna šírka
bola 100 a výška 70, t.j. grid je 100x70
(po tri bitmapy v jednom riadku) - do prvého
riadka sa vykreslia b1.bmp..b3.bmp; do druhého
(od y-súradnice 70) b4.bmp..b6.bmp, ...
Prémiová domáca úloha
- napíšte program, ktorý vypíše
ľubovoľný pascalovský program s vysvietením
lexém:
- všetky rezervované slová budú
tučným písmom (bold)
- všetky komentáre budú tmavomodré
a kurzívou (italic) - komentáre
{...}, //..., (*...*)
- všetky číselné konštanty (aj
reálne) budú zafarbené
nejakou farbou (napr. svetlomodré)
- všetky znakové reťazce (aj s apostrofmi
aj s # kódmi) budú zafarbené
nejakou inou farbou (napr. červené),
napr. aj 'abcd'#13#10'efgh'
- zrejme použijete skener z prednášky,
do ktorého doplníte chýbajúce
časti
- výpis bude v neproporčnom fonte, napr.
"Courier New"
- výstup môže byť
- do Canvasu nejakej grafickej plochy (toto
bude najmenej hodnotené riešenie)
- do komponentu RichEdit - podobný
Memo, ale umožňuje nastavovať štýl fontu
a farby
- do súboru vo formáte .HTML
|
© 2002 AB, KVI blaho@fmph.uniba.sk
|