Entwickler-Ecke
Multimedia / Grafik - wie überprüft man ob ein tcanavas rechteck ein andres berürt
fox67 - Do 09.09.10 10:05
Titel: wie überprüft man ob ein tcanavas rechteck ein andres berürt
wie kann man überprüfen ob ein canvas recangle ein anderes überlappt. also auch wenn es nur ein pixe ist
Hidden - Do 09.09.10 10:16
Moin!
Nach dem Zeichnen, oder vor?
Vor dem Zeichnen ist einfach: Für alle Eckpunkte des TRect überprüfen, ob sie im 2. TRect liegen..
Nach dem Zeichnen(wenn du das Bild also nicht selber zeichnest, z.B. als Bitmap übergeben bekommst) musst du wohl erst einmal die Pixel auswerten, um auf die Eckpunkte zu kommen.
lg,
Martok - Do 09.09.10 15:43
Hallo,
bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den
Richtlinien [
http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge: |
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. TCanvas könntest du, so es denn wichtig ist, in der "Betrifft"-Zeile eintragen. Danke Dir!
Viele Grüße,
Martok
helgew - Do 30.09.10 23:36
nicht mehr ganz aktuell, der thread hier ... aber so kanns funktionieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function Constrain(min, max, value: longint): longint; begin result := value; if value < min then result := min; if value > max then result := max; end;
function EmptyIntersection (Intersection: TRect): Boolean; begin result := ((Intersection.Left = Intersection.Right) or (Intersection.Top = Intersection.Bottom)); end;
function IntersectionRect(inner, outer: TRect): TRect; begin; result.Left := Constrain(outer.left,outer.Right, inner.Left); result.right := Constrain(outer.left,outer.Right, inner.right); result.Top := Constrain(outer.Top,outer.Bottom, inner.Top); result.Bottom := Constrain(outer.Top,outer.Bottom, inner.Bottom); end; |
Man prüft einfach, ob der Schnitt der beiden Rechtecke leer ist. Wenn man die Rechtecke selbst zeichnet, sollte man diese ohnehin zwischenspeichern, mit den GDI-Funktionen (GetPixel) wieder herumlesen ist furchtbar langsam.
Lannes - Fr 01.10.10 14:17
Hallo,
die WinAPI bietet schon IntersectRect(...) dafür, ein Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var rDest, r1, r2: TRect; begin r1 := Rect(0,0,100,100); Canvas.Brush.Color := clRed; Canvas.FillRect(r1); r2 := Rect(90,90,200,200); Canvas.Brush.Color := clBlue; Canvas.FillRect(r2); if IntersectRect(rDest, r1, r2) then begin showmessage('r2 überlappt r1'); Canvas.Brush.Color := clBlack; Canvas.FillRect(rDest); end else showmessage('Keine Überlappung'); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!