10. príklady


Posledná zmena: 30.10.2002

Banner Text 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