AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Rechteck auf Image zeichnen funktioniert nicht immer
Thema durchsuchen
Ansicht
Themen-Optionen

Rechteck auf Image zeichnen funktioniert nicht immer

Ein Thema von Creepy666 · begonnen am 28. Mär 2015 · letzter Beitrag vom 28. Mär 2015
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.165 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Rechteck auf Image zeichnen funktioniert nicht immer

  Alt 28. Mär 2015, 09:24
Delphi-Quellcode:
Form2.Image.Picture.LoadFromFile('test.bmp');
Form2.DrawRedRectangle(strtoint(Rec.x), strtoint(Rec.y));
Warum immer die absolute Adressierung über Form2. ?
egal...
Delphi-Quellcode:
    Image.Canvas.Rectangle(X, Y, X+17, Y+9);
    Image.Update;
    Application.ProcessMessages;
Wie wäre es mit

Image.Picture.Bitmap.Canvas.Rectangle(X, Y, X+17, Y+9);
Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#2

AW: Rechteck auf Image zeichnen funktioniert nicht immer

  Alt 28. Mär 2015, 09:51
Wer brngt den Leuten eigentlich immer dieses grauenhafte und fehlerverursachende if x = true then bei?

Was ist _ImageSearch, ImageSearch und ImageSearchDLL.dll?

Man verwendet niemals relative Pfadnamen.
('test.bmp' ohne eine Pfadangabe)

Wenn bei Split nicht mindestens 2 Einträge rauskommen, dann knallt es.

Das mit den globalen Variablen (Form1 und Form2) wurde schon gesagt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Creepy666

Registriert seit: 7. Sep 2014
2 Beiträge
 
#3

AW: Rechteck auf Image zeichnen funktioniert nicht immer

  Alt 28. Mär 2015, 11:51
Hallo Mavarik

Form2. nur deshalb, da die Suchfunktion in einer separaten Unit liegt.
Der D7 Editor hat ja leider kein Collapse/Expand. Der Übersichtlichkeit halber lagere ich dann
häufig verwendete Routinen in separate Units aus.

Dein Tip funktioniert übrigens auch, bringt aber im Programmlauf auch keine Besserung.
Ich habe jetzt im Code einige Debugeinträge mitloggen lassen.
Code:
[28.03.2015, 12:11:53] - --- Begin Search ---
[28.03.2015, 12:11:53] - --- Image laden... Durchlauf 1
[28.03.2015, 12:11:53] - --- Suchergebnis: 1|1195|197|15|6
[28.03.2015, 12:11:53] - --- Koordinaten gefunden: 1195:197 - Toleranz: 65
[28.03.2015, 12:11:53] - --- DrawRedRectangle: Rechteck gezeichnet bei 1195:197 
[28.03.2015, 12:11:53] - --- Image laden... Durchlauf 2   // Hier wird jetzt das neue Image mit dem Rechteck geladen (Rechteck ist physikalisch vorhanden)
[28.03.2015, 12:11:53] - --- Suchergebnis: 1|1195|197|15|6   // es wird aber trotz Übermalung weiterhin das Suchbild an der gleichen Position gefunden
[28.03.2015, 12:11:53] - --- Koordinaten gefunden: 1195:197 - Toleranz: 65
[28.03.2015, 12:11:53] - --- DrawRedRectangle: Rechteck gezeichnet bei 1195:197
[28.03.2015, 12:11:53] - --- Image laden... Durchlauf 3
[28.03.2015, 12:11:53] - --- Suchergebnis: 1|1195|197|15|6
[28.03.2015, 12:11:53] - --- Koordinaten gefunden: 1195:197 - Toleranz: 65
[28.03.2015, 12:11:53] - --- DrawRedRectangle: Rechteck gezeichnet bei 1195:197
[28.03.2015, 12:11:53] - --- Image laden... Durchlauf 4
[28.03.2015, 12:11:54] - --- Suchergebnis: 0
[28.03.2015, 12:11:54] - --- End Search ---
Die Suchfunktion bringt trotz des roten Rechtecks im Bild immer wieder die gleichen Koordinaten, als ob das Rechteck
nie gezeichnet wurde.
Mir kommt das so vor, als ob erstgeladene Bild in einer Art Cache liegt und statt des darübergeladenen
neuen Bilds immer und immer wieder verwendet wird.
Kann es sowas geben?


@himitsu
ImageSearchDLL.dll implementiert eine Pixelbereichssuche nach einem Bild auf dem Bildschirm, unterstützt durch die
Angabe einer Farbtoleranz.
Die Funktion wurde hier im Forum bereits vor einiger Zeit gepostet.
http://www.delphipraxis.net/141240-b...-absuchen.html

Deine Einwände sind durchaus berechtigt, danke. Der Programmcode läuft z.Zt. allerdings noch im lokalen Test.
Von daher sind mir die Pfadangaben erstmal unwichtig, solange sich alles im Exepfad abspielt.
Sobald es läuft, wird alles nochmals grundüberholt und aufgeräumt.

Split kracht auch nicht, da in der Prozedur mit Assert gearbeitet wird.
Delphi-Quellcode:
procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);
begin
   Assert(Assigned(Strings));
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;

Geändert von Creepy666 (28. Mär 2015 um 11:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#4

AW: Rechteck auf Image zeichnen funktioniert nicht immer

  Alt 28. Mär 2015, 12:43
Code auslagern ist gut und schön, aber man sollte dem dann lieber alles übergeben und nicht daß er sich alles selber holt. Und schon ist die globale Variable nicht mehr da.

Split kracht auch nicht, da in der Prozedur mit Assert gearbeitet wird.
Es ging auch mehr um den Code nach dem Split

Wenn sichergestellt ist, daß Split immer genügend Zeilen liefert, dann OK, aber ansonsten kann dar blinde Zugriff auf einen nichtexistierenden Index Probleme bereiten.
A hätte auch ein Array sein können, aber als TStringList ist da zumindestens eine Prüfung integriert.

Zitat:
// Hier wird jetzt das neue Image mit dem Rechteck geladen (Rechteck ist physikalisch vorhanden)
Du hast natürlich auch geprüft, daß es dort wirklich bereits übermalt ist,
bzw., daß vor dem Speichern auch wirklich übermalt wurde?

Zitat:
Mir kommt das so vor, als ob erstgeladene Bild in einer Art Cache liegt und statt des darübergeladenen
neuen Bilds immer und immer wieder verwendet wird.
Kann es sowas geben?
Kann natürlich sein (VirtalStore)

Erstmal der relative Pfad ... also weiß hier keiner wo das Bild eigentlich liegt.
Ein Therapeut entspricht 1024 Gigapeut.
  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 18:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz