AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi negativer Auswahlrahmen
Thema durchsuchen
Ansicht
Themen-Optionen

negativer Auswahlrahmen

Ein Thema von Delphi Star · begonnen am 27. Jan 2007 · letzter Beitrag vom 27. Jan 2007
Antwort Antwort
Delphi Star

Registriert seit: 4. Apr 2004
432 Beiträge
 
Delphi 2005 Personal
 
#1

negativer Auswahlrahmen

  Alt 27. Jan 2007, 00:28
Ich programmiere im Augenblick an einem Programm, mit dem man aus einem Bild ein oder mehrer Bildausschnitte erstellen kann. Ich benutze eine TPaintBox. Momentan komme ich beim Auswahlrahmen nicht weiter. Er sollte gestrichelt sein und immer das Negativ zum darunter liegenden Bild zeigen. In der Mitte sollte er durchsichtig sein, allerdings sollte man ihn dort mit der Maus greifen können. Am Rand soll man ihn natürlich vergrößern können. Ich weiß wirklich nicht, wie ich das umsetzen soll.
Real programmers code in binary
SwapIt: Punkte
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: negativer Auswahlrahmen

  Alt 27. Jan 2007, 11:23
Hi,
dass sind ja gleich 3 Wünsche auf einmal (oder so ähnlich).
Jetzt hast Du zwar schon sehr schön gesagt, was Du Dir vorstellst, aber irgendwie fehlt da noch ein wenig was. Die üblichen Fragen, die Du immer beantworten solltest (dann kann man Dir einfach gezielter helfen und muss nicht erst nachfragen), sind:
  • Woran genau scheiterst Du gerade?
  • Was hast Du schon versucht?
  • Was klappt schon?

An sich hast gehört natürlich auch das generelle Ziel rein, aber da hast Du ja schon ein wenig was geschrieben. Am Besten ist es aber immer so viel Information wie möglich gleich raus zu geben. Wichtig ist hier z.B. auch die Frage, wie arbeitet überhaupt deine Komponente im Moment? Wird das eigentlich Bild noch im Speicher gehalten oder ist es nur in der PaintBox verfügbar?

Ja, wichtig ist hier erstmal, was genau Du schon kannst und woran Du scheiterst. Deshalb solltest Du hier vom Einfachen ins Komplexe übergehen. Das Einfachste ist es imho erstmal einen Rahmen (ohne besondere Eigenschaften) zu zeichnen und den so markierten Bereich zu kopieren. Bekommst Du das denn hin? Ist dir hier alles klar?
Solltest Du hier schon Probleme haben, so hilft Dir definitiv die DP-Suche weiter, wurde schon sehr oft behandelt.

Hast Du das fertig, so ist das Nächste Problem, die man den Rahmen zum Negativ des darunter liegenden Bildes macht. Hier kannst Du einfach den PenMode des verwendeten Stiftes auf pmNot stellen. Dabei wird dann zum Zeichnen immer das Komplement der Farbe auf dem Canvas verwendet. Meinst Du mit negativ ein SW-Negativ, so müsstest Du einfach nur die Farben in Graustufen umrechnen (wieder die Suche) und kann die dann ggf. noch das Komplement wählen.

Das Schwierigste Problem ist dann, wie Du den Rahmen bewegst. Der einfachere Teil ist das Greifen mit der Maus. Du hast einen Rahmen (i.d.R. wohl ein Rechteck?). Über das OnMouseDown-Ereignis der Paintbox lässt sich die Position eines Mausdrucks bestimmen. Jetzt kannst Du einfach schauen, ob diese Mausposition im Rahmen liegt (X >= Linker Rand und <= Rechter Rand,...). Hast Du mehr als einen Rahmen, gehst Du natürlich alle Rahmen durch und prüfst diese Bedingung für jeden einzelnen. Ja, damit weißt Du schon mal welchen Rahmen Du ausgewählt hast (oder eben dass es keiner war).

Der nächste Punkt ist dann also das Verschieben. Die einfache Idee ist es, dass Du einfach den Rahmen in gleicher Größe an einer anderen Stelle zeichnest. Da der Rahmen an einer beliebigen Stelle aufgenommen werden kann, hast Du hier zwei Möglichkeiten:
  1. Du merkst Dir die X,Y Position des OnMouseDown-Ereignis
  2. Du berechnest den Abstand der X,Y Position des OnMouseDown-Ereignis zu einer festen Ecke (z.B. der oberen Linken) und merkst dir diesen Abstand
In beiden Fällen hast Du eine Möglichkeit den Rahmen nun relativ zum eigentlichen Punkt, an dem er gegriffen wurde zu bewegen. Ich gehe jetzt einfach mal vom einfacheren ersten Fall aus. Hier kannst Du zu jeder neuen Mausposition die Differenz der X- und Y- Koordinaten zum Vorgänger-Ereignis berechnen und den Rahmen um diese Position verschieben. Das Problem, dass Du dabei aber bekommen dürftest ist, dass der alte Rahmen nicht gelöscht wird. Du zeichnest also den Rahmen an seiner neuen Position, siehst aber eben auch den alten (zuvor gezeichneten) Rahmen noch. Was also tun?
Nun ja, schau Dir einfach an, warum Du das Negativ nimmst! Hast Du hier nur mit dem Not gearbeitet, so sollte recht klar sein was passiert...

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz