Autor Beitrag
klaus2009
Hält's aus hier
Beiträge: 3

XP, Vista Enterprise
Delphi 3, 5 und 2007
BeitragVerfasst: Fr 16.01.09 01:14 
Hallo Experten,

ich habe ein TImage das ein BMP enthält und auf einer Form plaziert ist. Solange ich die Form zur Laufzeit in der Grösse nicht verändere, liefert mir image1.Canvas.Pixels[x,y] den richtige Farbwert zurück. Sobald ich die Form in der Grösse verändere und damit auch das BMP bzw. TImage Element vergrössert wird (das ist so gewollt), liefert mir Pixels falsche Werte.
Ich habe festgestellt das die Pixelwerte immer noch den Werten der Originalgrösse entsprechen.
Also wenn ich die Mouse über einem Bereich habe, der im Ursprungszustand (also vor der Formvergrösserung) Grün war, bekomme ich nach der Vergrösserung immer noch den Grünwert zurück, obwohl der Bereich nun eigentlich eine andere Farbe hat.

Was kann ich tun, um auch bei einer vergrösserten Form die richtigen Farbwerte zurückzubekommen?

Gruß

Klaus
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 16.01.09 02:14 
Du hast also stretch auf true (und proportional auch, oder nicht)? Ich vermute, du musst dir aus der originalbildgröße und der neuen größe einen Streckfaktor berechnen (wenn du das bild doppelt so groß streckst, erhälst du NeueSeite/AlteSeite = 2). Dann weißt du, dass, wenn die Maus z.B. auf Pixel 10, 10 ist, dann ist das eigentlich pixel 5, 5, also die hälfte.
(ist eine vermutung, probiers mal aus :nixweiss: )

PS: je nach dem ob du proportional true oder false hast, kann es sein, dass du für beide seiten einen eigenen streckfaktor brauchst. ist proportional true, sind beide seiten um den gleichen wert gestreckt worden.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
klaus2009 Threadstarter
Hält's aus hier
Beiträge: 3

XP, Vista Enterprise
Delphi 3, 5 und 2007
BeitragVerfasst: Sa 17.01.09 20:36 
Hallo JayEff,

gute Idee, probiere ich gleich mal aus. Denkst du das prinzipiell gar nicht möglich ist von einem vergrössertem Bild die richtigen Werte zurückzubekommen ohne einen Workaround zu benutzten?

Gruß

Klaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 17.01.09 21:36 
Warum stretcht du eigentlich nicht selbst? Dann kannst du die Pixel normal auslesen. Von der Qualität her sollte sich da nichts ändern.

Wie das gezeichnet wird, müsste man im Quelltext einmal schauen. Vielleicht könnte man die reale Zeichenfläche irgendwie (vielleicht als DC) bekommen.
klaus2009 Threadstarter
Hält's aus hier
Beiträge: 3

XP, Vista Enterprise
Delphi 3, 5 und 2007
BeitragVerfasst: Sa 17.01.09 23:04 
ja vermutlich wird es wohl darauf hinauslaufen, bzw. dies wäre ein Alternativansatz. Wie man bilder stretch habe ich irgendwo im Netz schon mal gesehen, ich schau mal wie ich damit zurecht komme. Allerdings wäre die Frage was ist der Unterschied zwischen selber machen oder die VCl die Arbeit machen lassen?

Das mit dem Streckungsfaktor funktioniert zwar im Prinzip, versagt aber in meinem Fall, da ich den Streckungsfaktor im ersten Ansatz auf Grundlage der Image-Dimensionen berechnet habe, wenn das bmp aber im Center liegt (muss bei mir so sein) dann versagt das, wenn die Form nicht gleichmässig vergrössert wird. Könnte aber auch sein das ich hier einfach noch mehr Grips reinstecken muss, damit diese Ansatz funktioniert.

Was ich halt prinzipiell nicht verstehe ist, warum die Pixel Funktion versagt. Das BMP wird ja richtig dargestellt, von daher muss die Farbinformation ja eigentlich auch irgendwo richtig hinterlegt sein. Von daher sollte man diese auch mehr oder weniger direkt ermitteln können ohne grosse Klimmzüge machen zu müssen, oder übersehe ich da etwas?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.01.09 00:47 
user profile iconklaus2009 hat folgendes geschrieben Zum zitierten Posting springen:
ja vermutlich wird es wohl darauf hinauslaufen, bzw. dies wäre ein Alternativansatz. Wie man bilder stretch habe ich irgendwo im Netz schon mal gesehen, ich schau mal wie ich damit zurecht komme. Allerdings wäre die Frage was ist der Unterschied zwischen selber machen oder die VCl die Arbeit machen lassen?
Das ist ja nur ein Befehl (abgesehen von der Berechnung des Streckfaktors). Und die VCL benutzt vermutlich genau den selben.

user profile iconklaus2009 hat folgendes geschrieben Zum zitierten Posting springen:
Das mit dem Streckungsfaktor funktioniert zwar im Prinzip, versagt aber in meinem Fall, da ich den Streckungsfaktor im ersten Ansatz auf Grundlage der Image-Dimensionen berechnet habe, wenn das bmp aber im Center liegt (muss bei mir so sein) dann versagt das, wenn die Form nicht gleichmässig vergrössert wird. Könnte aber auch sein das ich hier einfach noch mehr Grips reinstecken muss, damit diese Ansatz funktioniert.
Das ist kein Problem, ich kann ja mal einen entsprechenden Viewer posten, den ich zu Testzwecken geschrieben habe. Der funktioniert mit Bildern, Videos, etc.

user profile iconklaus2009 hat folgendes geschrieben Zum zitierten Posting springen:
Was ich halt prinzipiell nicht verstehe ist, warum die Pixel Funktion versagt. Das BMP wird ja richtig dargestellt, von daher muss die Farbinformation ja eigentlich auch irgendwo richtig hinterlegt sein. Von daher sollte man diese auch mehr oder weniger direkt ermitteln können ohne grosse Klimmzüge machen zu müssen, oder übersehe ich da etwas?
Das Canvas wird das des enthaltenen Bildes sein, nicht das des gezeichneten Bildes. Ich schau gleich mal kurz über den Quelltext von TImage. ;-)