Rysowanie na powiększonej bitmapie

0

Cześć, od niedawna pisze programik graficzny i teraz pracuję nad wprowadzeniem opcji lupy (coś podobnego jak w Paint). Napisałem procedurkę która powiększa bitmapę o daną ilość razy. Wykorzystałem do tego tablicę dynamiczną. Pewnie można to było zrobić lepiej ale ja wypociłem coś takiego:

procedure TForm1.Powieksz(powiekszenie :Integer; Zrodlo :TBitmap; Kanwa :TCanvas; x,y :integer );
var Bmp : Array of Array of TColor;
    ZoomBmp : TBitmap;
    a,b, xx, yy, wys, szer : integer;
Begin
xx:=0 ; yy:=0;
wys:=Zrodlo.Height;
szer:=zrodlo.Width;
ZoomBmp:=TBitmap.Create;
ZoomBmp.Width:=Szer*powiekszenie;
ZoomBmp.Height:=Wys*powiekszenie;

SetLength(Bmp,Wys+1,Szer+1);
For a:=0 to Wys do
  begin
  For b:=0 to Szer do
  Bmp[a][b]:=Zrodlo.Canvas.Pixels[b,a];
  end;

For a:=0 to Wys do
  begin

 For b:=0 to Szer do
   begin

  ZoomBMP.canvas.Brush.color:=bmp[a][b];
  ZoomBMP.canvas.Pen.Style:=psClear;
  ZoomBMP.canvas.Rectangle(xx-1,yy-1,b*powiekszenie,a*powiekszenie);

  xx:=b*powiekszenie;

  end;
      yy:=a*powiekszenie;
  end;
Kanwa.Draw(X,Y,ZoomBMP);
End;

Wszystko działa. Ale teraz pytanie, jak wykombinować żeby rysowanie po tej powiększonej bitmapce powodowało jednocześnie rysowanie tego samego w odpowiedniej skali na tej normalnej? Może trochę tu pokaleczyłem polszczyzne ale chyba wiadomo o co chodzi... Who knows something?

No, chyba że jest jakiś komponencik?

0

Osobiście zrobiłbym to inaczej. Jakotaką bitmapę miałbym w zwykłej zmiennej TBitmap, a za pomocą CopyRect kopiował do okienka (jedna linijka kodu wystarczy, by powiększyć bitmapę o dowolną ilość razy!). Wtedy rysowanie odbywałoby się na tej bitmapie w pamięci (dzielisz sobie pozycję kursora przez powiększenie i masz pozycję na bitmapie początkowej) i przy każdym przesunięciu myszki wykonywałbym operację kopiowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1