Entwickler-Ecke

Multimedia / Grafik - Funktion um Bildausschnitt zu verschieben


Benny800 - Di 28.12.10 18:41
Titel: Funktion um Bildausschnitt zu verschieben
Hallo zusammen,

ich tüftel gerade ein einer Funktion um einen Bildausschnitt zu verschieben. Dazu benutze ich zwei TImage Komponenten. Image1 enthält das Bild und der Ausschnitt wird dann in Image2 kopiert und mit der Maus verschoben. Beim ersten Mal funktioniert das wunderbar. Wenn ich allerdings einen zweiten Bildausschnitt verschieben will, der größer als der erste ist, wird er in der Höhe und Breite vom ersten abgeschnitten.
Ich suche schon seit Stunden den Fehler und weiß nicht mehr weiter.
Hier der Code


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure TForm1.MoveSelection(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  source,dest: TRect;
  dy,dx: Integer;
begin
  if(selected) then
  begin
    dx := X - dcursorx;
    dy := Y - dcursory;

    if(x1 > x0) AND (y1 > y0) then begin source := Rect(x0,y0,x1,y1); dest := Rect(0,0,x1-x0,y1-y0); end;
    if(x1 < x0) AND (y1 > y0) then begin source := Rect(x1,y0,x0,y1); dest := Rect(0,0,x0-x1,y1-y0); end;
    if(x1 < x0) AND (y1 < y0) then begin source := Rect(x1,y1,x0,y0); dest := Rect(0,0,x0-x1,y0-y1); end;
    if(x1 > x0) AND (y1 < y0) then begin source := Rect(x0,y1,x1,y0); dest := Rect(0,0,x1-x0,y0-y1); end;

    Image1.Canvas.Pen.Width := 0;
    Image1.Canvas.Pen.Color := clWhite;
    Image1.Canvas.Brush.Color := clWhite;

    Image2.Width := source.Right - source.Left;
    Image2.Height := source.Bottom - source.Top;
    Image2.Left := dx;
    Image2.Top := dy;


    Image2.Canvas.CopyRect(dest,Image1.Canvas,source);
    Image1.Canvas.Rectangle(source); 

  end;
end;


X0, Y0, X1 und Y1 sind globale Variablen, die die Koordinaten der Eckpunkte der Auswahl enthalten.

Image2, dest und source haben immer die gleichen Maße, trotzdem wird dest nie größer als das zuerst gesetzte dest. Die Fläsche, die danach weiß gesetzt wird (source) hat immer die richtige Größe.

Grüße, Dennis


bummi - Di 28.12.10 19:05

Das zugrundeliegende Bitmap wird nur initial erzeugt, das vergrößern der Images verändert die Größe des Bitmaps nicht mehr.

Delphi-Quelltext
1:
Image.Picture.Bitmap := nil;                    


vor dem Malen behebt Dein Problem.


Benny800 - Di 28.12.10 19:11

Vielen Dank.
Du bist mein Held :) Jetzt kann ich endlich wieder weiterarbeiten.