Cięcie Imeg'a

0

Na formie głównej umieszczam Image1 (300x300) jak teraz wykonać procedure żeby po najechaniu na ten image i kliknięciu LMB (OnClick) pobrać obszar 50x50 wokół kursora myszki z obrazka w image1 i wrzucić do image2 ten wycięty/skopiowany fragment??

0

TPoint+GetCursorPos, Canvas+CopyRect

0

:] mógł byś to troche rozwinąć ? :]

0

:] mógł byś to troche rozwinąć ? :]

no to rozwine to do pełnego kodu:

w sekcji var dopisujesz:

  poz:TPoint;

potem w OnMouseMove Image'a 1 dajesz:

  poz.X:=X;
  poz.Y:=Y;

a na koniec w OnClick Image'a 1:

  with Image2.Picture.Bitmap do begin
    Width:=50;
    Height:=50;
    Canvas.Pen.Color:=clBlack; // tu ustalasz kolor ramki i tła miejsca bez obrazka
    Canvas.Brush.Color:=clBlack;
    Canvas.Rectangle(0,0,Width,Height);
    Canvas.CopyRect(Rect(0,0,Width,Height),Image1.Picture.Bitmap.Canvas,
      Rect(poz.X-25,poz.Y-25,poz.X+25,poz.Y+25));
  end;

a jak chcesz Od razu zrobić powiększenie to po prostu zamieniasz Width i Height na większe rozmiary i będziesz miał od razu lupę obrazka :)
a łatwiej by to było zrobić w samym OnMouseMove i efekt też byłby wtedy ciekawszy.

0

Adamo: nie uwzględniłeś, że można mieć włączone Strech Draw w image1 :)

0

jeśli będzie włączone stretchdraw no to będzie po prostu powiększone to co widać (zniekształcone), a to już problem nie mój raczej.

0

no dobra działa prawie perfekcyjnie tylko ze jak tu wyciąć prostokątny kawałek ?? i dlaczego pojawiają sie jakies bugi jak ruszam kursorem tzn tzk jakby poziome linje sie pojawiają i znikają ?

0

bo tam jest napisane w procedurze żeby zamazywało ekran przy ruszeniu czarnym prostokątem i dopiero rysowało od nowa, dzięki temu jak najedziesz kursorem na skraj to poza obrazkiem masz czarne tło,ale możesz to zlikwidować (te trzy linijki - Canvas.Pen.Color:=clBlack; Canvas.Brush.Color:=clBlack; i Canvas.Rectangle(0,0,Width,Height)).
A tego z tym jak tu wyciąć prostokątny kawałek to nie kapuję :|

0

no tak to wiem ze sie pojawiają bugi poza ekranem jak NIE MA tego kawałka kodu tyle ze mi sie pojawiają bugi jak poruszam kursorem gdziekolwiek tzn mam taki efekt ze pojawia sie i znika poziomy szary gruby pas. a co do tego prostokąta to dostaje 50x50 obrazek i jak wpisze np 50x100 to mi na strechu rozciąga a jak NIE MA strecha to są bugi.

0

To można wprowadzić warunek żeby rysowało ten prostokąt tylko jeśli kursor jest przy krawędzi obrazka, np:

if (poz.X<25) or (poz.Y<25) or (poz.X>Image1.Picture.Bitmap.Width-25) or (poz.Y>Image1.Picture.Bitmap.Height-25) then {rysujprostokat}

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