AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bildbereiche auswählen/Auswahl zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Bildbereiche auswählen/Auswahl zeichnen

Ein Thema von CK_CK · begonnen am 4. Aug 2006 · letzter Beitrag vom 5. Aug 2006
Antwort Antwort
Benutzerbild von CK_CK
CK_CK

Registriert seit: 30. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#1

Bildbereiche auswählen/Auswahl zeichnen

  Alt 4. Aug 2006, 12:14
Hi Leute,
ich sitze hier schon seit einer Stunde und weiß nicht, wie ich's angehen soll...
Also frage ich jetzt mal hier nach (nachdem die Suchfunktion nichts ausgespuckt hat).

Also, ich habe ein TImage, welches ein Bild enthält. Auf diesem Bild soll der Anwender jetzt Regionen markieren sollen, ähnlich wie in Photoshop, also Rechteckige Auswahl, Elliptische, usw... (wenn ich einen Ansatz habe, werde ich dann versuchen, das irgendwie mit dem Zauberstab nachzuprogrammieren...

Es ist jetzt nicht so, dass ich mich mit programmieren/Delphi nicht auskenne, aber im Moment habe ich irgendwie ein Brett vor'm Kopf
Mir würde ja schon ein kleiner Denkanstoß reichen...

Naja, vielleicht kann mir ja jemand helfen (ich hoffe, mein Problem ist klar geworden),
sonnige Grüße,

Edit: Es geht natürlich nicht vorrangig darum, die Auswahl zu zeichnen, sondern eher darum, diese zu speichern, und mit ihr weiterzuarbeiten, und das Ursprungsbild immernoch im Hintergrund zu haben (Auswahl entfernen->normales Bild ist wieder da)
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: Bildbereiche auswählen/Auswahl zeichnen

  Alt 4. Aug 2006, 12:28
Hi,
was genau ist denn das woran du scheiterst? Ich meine klar, du hast erklärt was du machen möchtest, wofür fehlt genau der Ansatz?
Das markieren kannst du über die Mausereignisse OnMouseDown, OnMouseMove und OnMouseUp vornehmen.
Mit dem OnMouseDown musst du halt schauen welche Aktion durchgeführt werden soll. Der Einfachheit halber nehmen wir hier einfach mal an, dass du eine rechteckige Auswahl treffen möchtest. Du merkst dir nun einfach die Mauskoordinaten (die bekommst du von der Ereignisbehandlung gleich geliefert). Wird die Maus nun bewegt, kannst du die Größe des Rechtecks anpassen. Das OnMouseMove liefert die die aktuellen Mauskoordinaten, du musst nur dafür sorgen, dass ein Rechteck von den alten Koordinaten (die du dir merkst) zu den nun aktuellen gezeichnet wird. Da zeichnen auf dem Canvas dir deinen eigentlichen Hintergrund überzeichnen würde (und das willst du ja nicht), kannst du einfach den Mode (des Stifts) auf pmXOR setzen. Zeichnest du zweimal an der gleichen Stelle, so ist das alte unveränderte Bild zu sehen.
Im OnMouseUp kannst du dann das zeichnen beenden und kennst die Auswahl.

Also einfach gesagt:
OnMouseDown -> Merken der StartKoordinaten + Pen.Mode := pmXOR

OnMouseMove -> Letztes gezeichnetes Rechteck erneut zeichnen (löscht es wegen pmXOR), Rechteck von StartKoordinaten zu den aktuellen Koordinaten zeichnen, die aktuellen Koordinaten speichern (damit Rechteck mittel XOR wieder gelöscht werden kann)

OnMouseUp -> Endkoordinaten merken, fertig!

Gruß Der Unwissende

[ADD]
Toll, hättest du früher sagen können
[/ADD]

[ANTWORT NACH ROTEM KASTEN]

Zitat von CK_CK:
Edit: Es geht natürlich nicht vorrangig darum, die Auswahl zu zeichnen, sondern eher darum, diese zu speichern, und mit ihr weiterzuarbeiten, und das Ursprungsbild immernoch im Hintergrund zu haben (Auswahl entfernen->normales Bild ist wieder da)
Ja, bleibt für mich die Frage was genau du wissen möchtest. An sich hast du ja irgendein Format, z.B. ein Bitmap. Diese kannst du natürlich in einem TBitmap Objekt speichern. An sich ist das denke ich grob der Weg den du wählen musst. Du hälst das Original in einem Objekt. Mit den Ausschnitten tust du im Prinzip nichts anderes. Alles was du anzeigen kannst ist letztlich immer eine rechteckige Bitmap (mehr oder weniger korrekt). Jedenfalls kannst du auch wenn du eine Ellipse auswählst zu dieser einfach das umgebende Rechteck berechnen. Nun erzeugst du eine leere Bitmap in der entsprechenden Größe und kopierst deinen Ausschnitt hier rein (der Hintergrund der Bitmap sollte also transparent sein). Das war's eigentlich schon.
Wird nun die Auswahl gelöscht, gibst du die Instanz im Speicher wieder frei und holst die andere TBitmap (mit dem Original) zurück.
Ich denke nicht, dass das wirklich das ist, was du wissen möchtest. Von daher noch mal die Bitte, sag doch was genau der Schritt ist an dem du scheiterst.

Deine Formulierung ist halt sehr allgemein. Ich denke nicht, dass sich jmd. die Überlegungen zu deinem Programm machen wird. Also wenn du etwas genauer sagen könntest woran exakt du scheiterst. Ich meine wie geht's weiter ist keine gute Frage (sorry).
An sich gibt es halt viele Ansätze wie man das machen könnte, aber es kommt darauf an was du damit machen möchtest.
  Mit Zitat antworten Zitat
Benutzerbild von CK_CK
CK_CK

Registriert seit: 30. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Bildbereiche auswählen/Auswahl zeichnen

  Alt 4. Aug 2006, 12:31
Zitat von Der_Unwissende:
[ADD]
Toll, hättest du früher sagen können
[/ADD9
Tut mir leid
Hab zu früh auf ABSENDEN geklickt...
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat
Benutzerbild von CK_CK
CK_CK

Registriert seit: 30. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Bildbereiche auswählen/Auswahl zeichnen

  Alt 4. Aug 2006, 19:44
8 Stunden später und immer noch keine Idee...

Deshalb ein leises (und letztes) *push*
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#5

Re: Bildbereiche auswählen/Auswahl zeichnen

  Alt 5. Aug 2006, 12:23
ich verstehe das problem auch nicht, mal einen denkanstoß...

schreibe dir
- eine komponente vom Typ TCustomControl
- eine bitmap-eigenschaft, welche das grundbild enthält
- mittels mousedown/up/move die Region definieren lassen (bei down position setzen, bei move nur zeichen)
- das zeichnen selbst einfach per bitblt auf das canvas des controls machen (gleiches in der paint-methode (override))

am einfachsten ist natürlich rechteck/elipse, da kannst du TRect als speicher für die koordinaten nehmen. bei polygon musst du ein dynamisches array oder eine TList mit TPoint-pointern nehmen (ggf. überschneidungsprüfung).

HTH Frank
  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 09:24 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