Autor |
Beitrag |
klaus2009
Hält's aus hier
Beiträge: 3
XP, Vista Enterprise
Delphi 3, 5 und 2007
|
Verfasst: 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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  )
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 
Hält's aus hier
Beiträge: 3
XP, Vista Enterprise
Delphi 3, 5 und 2007
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 3
XP, Vista Enterprise
Delphi 3, 5 und 2007
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.01.09 00:47
klaus2009 hat folgendes geschrieben : | 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.
klaus2009 hat folgendes geschrieben : | 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.
klaus2009 hat folgendes geschrieben : | 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. 
|
|
|