Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Abfrage von Pixelfragen


TobyNMS8 - Fr 10.03.06 09:49
Titel: Abfrage von Pixelfragen
Moin Moin,

ich hab da ein Problem mit der Delphi-Abfrage der Pixel. Ich habe den Befehl:


Delphi-Quelltext
1:
 Canvas.Pixels[x,y]                    


benutzt. Allerdings, wenn man dann InttoStr eingiebt, kommt egal bei welcher Farbe (durch Shapes geregelt) der selbe Wert 16776960.

Da ich aber mit diesem Wert ein Objekt steuern will und dieses durch ein Hindernis in anderer Farbe gestoppt werden soll, wird das natürlich, da ja der Wert immer gleich ist, nicht Funktionieren.

Frage: Wie bekommt man den Wert richtig hin oder gibt es alternativen?

Ich danke schon jetzt für die Antworten


Gausi - Fr 10.03.06 09:58

Hallo und :welcome: in der Entwickler-Ecke!

Zeig doch mal bitte etwas mehr Code, was du da machst. Entweder machst du mit x und y was verkehrt, oder übergibst den erhaltenen Farbwert nicht richtig an IntToStr.


btw: Anstelle der [color=blue]...[/color]-Tags gibt es hier die [delphi]..[/delphi]-Tags (unter Bereiche), um Quellcode als solchen darzustellen.


TobyNMS8 - Fr 10.03.06 10:07

Also ich gebe mal den kompletten Befehl an den ich so original in Delphi geschrieben habe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.ZeitmesserTimer(Sender: TObject);
var VorAuto: Integer;
begin
VorAuto := Canvas.Pixels[Auto.Left + 1143];
if ((Auto.Left < 390and (VorAuto=16776960))
then begin
Auto.Left := Auto.Left + 1;
Edit1.Text:='Vorgang läuft: '+ InttoStr(VorAuto);
end
else if Auto.Left = 390
then begin
Zeitmesser.Enabled := False;
Auto.Left := 1;
Edit1.Text:='Vorgang beendet';
StartBtn.Caption := '&Start';
end
end;


Vielleicht hilft das weiter bei der Fehlersuche. Ich weiß nicht weiter...


MightyPit - Fr 10.03.06 10:43

Hmm laut Delphi-Hilfe gibt Canvas.Pixel ein TColor zurück wenn du den zurückgegebenen Wert in ein Integer schreibst und dabei so eine Zahl rauskommt, und immer die gleiche, könnt ich mir vorstellen das es der Zeiger ist den du so bekommst. Änder den Typ von VorAuto in TColor und vergleich gegen den Hexwert der Farbe in der Form $AABBGGRR wobei AA = Alphakanal, BB = Blau, GG = Grün und RR = Rotanteil in Hexadezimal ist

Grüßle,
Pit


Jailbird - Fr 10.03.06 10:48

Sofern dich Alpha-Werte nicht stören, kannst du folgendes benutzen


Delphi-Quelltext
1:
VorAuto := ColorToRGB(Canvas.Pixels[Auto.Left + 1143]);                    



Edith meint, dass es bei Jailbird auch ohne ColorToRGB problemlos funktioniert


GTA-Place - Sa 11.03.06 16:32

Dir ist bewusst, dass du mit Canvas.Pixels[X, Y]; die Farbe der Form an Stelle X, Y bekommst und nicht die Farbe vom Shape, welches darüber liegt?


TobyNMS8 - Fr 17.03.06 09:30

Ahh... das wird's sein. Danke. Jetzt stekllt sich aber für mich eine weitere Frage: Kann man die Farbe der Shapes abfragen? Und wenn nicht: Wie kann ich die Farbe des 'Canvas' ändern?

Danke jetzt schon für die Antwort!