AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FMX.TImage

Ein Thema von Kai_in_HH · begonnen am 21. Mär 2021 · letzter Beitrag vom 24. Mär 2021
Antwort Antwort
Kai_in_HH

Registriert seit: 25. Jun 2008
Ort: Hamburg
59 Beiträge
 
Delphi 11 Alexandria
 
#1

Problem mit FMX.TImage

  Alt 21. Mär 2021, 23:13
Guten Abend zusammen,

ich arbeite mich gerade in die Erstellung "geräteunabhängiger Anwendungen" ein um am Ende mal eine Android App erstellen zu können. Soweit klappt das auch recht gut, aber die Komponenten TImage (Firemonkey, nicht VCL) gibt mir dann doch Rätsel auf.

Ich habe in meinem Form ein TImage mit 337 Höhe und 329 Breite.

Wenn ich nun aber zwei Punkte definiere und eine Linie zeichne, erscheint das "Gemalte" unglaublich gezoomt.
Delphi-Quellcode:
  Image1.Bitmap.Canvas.BeginScene;
  p1 := TPointF.Create(1,1);
  p2 := TPointF.Create(10,1);
  Image1.Bitmap.Canvas.DrawLine(p1, p2, 1);
  p1 := TPointF.Create(30,30);
  p2 := TPointF.Create(30,100);
  Image1.Bitmap.Canvas.DrawLine(p1, p2, 1);
Obiger Code gibt mir zwei Linien aus und die zweite dürfte niemals über die Mitte hinaus gehen. Tut sie aber, wie man am Bild sieht.
fmxtimage.jpg

Ich habe schon http://docwiki.embarcadero.com/ durchgewühlt, finde aber keinen Ansatz dafür.

Vermutlich irgendein Denkfehler meinerseits (da neu in Firemonkey).

Danke schon mal.

Kai
Kai
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.117 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit FMX.TImage

  Alt 21. Mär 2021, 23:22
Es gibt verschiedene Scales im FMX System (ohne jetzt exakt recherchiert zu haben, um diese Zeit).
SceneScale
CanvasScale
BitmapScale

Die stehen heutzutage auch x2 bis x3 bei den hochauflösenden Displays (Retina).
Das muss man mit berücksichtigen, da solltest Du mal suchen.

FMX arbeitet auch mit MultiResolutionBitmaps, bei denen mehrere Bitmaps für ein Bild verwendet werden,
und das passende wir je nach Größe verwendet.
So kann FMX von 640x480 bis 8K Alles abdecken.
Das Thema Bitmaps ist jedenfalls nicht trivial, und unterscheidet sich deutlich von VCL.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit FMX.TImage

  Alt 22. Mär 2021, 00:32
wie groß ist denn Dein Bitmap? Wenn TImage und Bitmap unerschiedliche Ausmaße haben und Image z.B. auf stretched steht, dann kann sowas durchaus so wie gezeigt aussehen.
  Mit Zitat antworten Zitat
Kai_in_HH

Registriert seit: 25. Jun 2008
Ort: Hamburg
59 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit FMX.TImage

  Alt 22. Mär 2021, 15:42
Danke für die bisherigen Antworten.

Eins vorweg
Es gibt verschiedene Scales im FMX System (ohne jetzt exakt recherchiert zu haben, um diese Zeit).
Das Thema Bitmaps ist jedenfalls nicht trivial, und unterscheidet sich deutlich von VCL.
...ja, das merke ich gerade auch.

Was gestern bzw. heute passiert ist zeigt übrigens, dass das ein Layer-8-Problem war.

Auf meinem Desktop funktioniert alles astrein.
Aber mein Tablet mit einer Wahnsinnsauflösung hat in der Anzeigeneinstellung "Skalierung 200%". Ups.....und schon haben wir den Salat.....

Was also das Thema mit der Skalierungen anbelangt, da werde ich mich wohl erst noch reinfuchsen müssen.

Hat da jemand irgendwo eine gute Einführung im Internet gesehen?
Kai
  Mit Zitat antworten Zitat
Kai_in_HH

Registriert seit: 25. Jun 2008
Ort: Hamburg
59 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem mit FMX.TImage

  Alt 22. Mär 2021, 22:47
Sodale, so weit (vermutlich nicht nur) mich Firemonkey nervt....ich habe es hinbekommen.

Meine App läuft unter Windows auf dem Desktop und dem Tablet jetzt richtig (ja, die Skalierung ist es) und sogar nach dem Umstellen auf Android auf meinem S10+.

Dazu ermittel ich die Skalierung vom OS, skaliere meine TImage-Instanz entsprechend im Form und leite auch einen Faktor davon ab, mit dem ich dann hinterher im Image male.

Meine Übungsanwendung ist der Klassiker: Biorhythmusberechnung.

Anbei mal mein Code mit Kommentaren an den entsprechenden Stellen.

Es funktioniert wie gesagt unter Win10 als auch Android, aber ich weiß nicht, ob das der richtige Weg ist.
Angehängte Dateien
Dateityp: zip 1stAndroidApp.zip (58,6 KB, 5x aufgerufen)
Kai

Geändert von Kai_in_HH (22. Mär 2021 um 23:23 Uhr) Grund: Inline Code durch Attachment ersetzt
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.117 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit FMX.TImage

  Alt 23. Mär 2021, 19:01
Richtig, bei mir sieht es ähnlich aus
Wollte immer mal richtig aufräumen.

Du könntest versuchen am TBitmap.BitmapScale zu drehen,
vieleicht bekommst Du es ja abgestimmt.

Ich habe am Ende noch Text mit Matrix skalieren müssen, nur schonmal als Vorwarnung,
aber es gibt da mittlerweile ein paar Dinge die es leichter machen können.
Wie gesagt, Aufräumen vs. NeverChangeRunningSystem ...
  Mit Zitat antworten Zitat
Kai_in_HH

Registriert seit: 25. Jun 2008
Ort: Hamburg
59 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Problem mit FMX.TImage

  Alt 23. Mär 2021, 22:25
Dummerweise sagt docwiki.embarcadero nichts darüber.

Also mal ausprobiert und .... äh .... ja ne is klar. Wieso nicht gleich so?

Also in meinem Programm nehme ich ja die Screenskalierung (bei meinem Tablet 200%, Wert ist 2) und für die Bitmapskalierung rechne 1 / 2 = 0,5.
Meine Grafik, von der vorher nur der obere linke Quadrant zu sehen war (also doppelt so groß und hoch als ich es will), wird dann richtig angezeigt, wenn ich in den Formeln diesen Faktor (0,5) mit hinzuziehe.

Nehme ich den Faktor raus und verwende dafür BitmapScale, setze die Property schlicht und einfach 1 kommt es auch richtig.

Ich vermute also, dass der Wert BitmapScale aussagt in welchem Verhältnis die Bitmap innerhalb des TImage "gezoomt" werden soll. Aber eben nur gültig für Windows.

Bei Android? Vergiss es.
Hier muss mein alter Faktor in den Berechnungen immer noch vorher berechnet und gesetzt werden.

Also mal ganz ehrlich, was ist denn das für ein Mist! Da macht doch die geräteübergreifende Entwicklung keinen Spaß mehr.
Von einem Framework erwarte ich, dass es mir genau diese Pixelschubserei abnimmt.

Aber nein, da muss ich folgenden Code einbauen (anstatt einer IfDef-Orgie)

Delphi-Quellcode:
case TOSVersion.Platform of
  pfWindows: Begin
    Image1.Bitmap.BitmapScale := 1;
    PaintingScale := 1;
  End;
  pfAndroid: Begin
    PaintingScale := 1 / ScreenScaling;
  End;
end;
Zwei mal kompilieren muss ich ja sowieso, aber dann auch noch Gedanken machen müssen über Bildschirmauflösung, Skalierung etc.....ne ne ne.

Oh, wie einfach war da (ca 1986) noch die Programmierung mit TurboPascal für Windows 1.0 (ja, sogar da war ich schon bei Borland, war der erste Supporter dafür) unter Win 3.11.....OK, man musste alle Fensterhandles selber erzeugen und hatte ne Menge Pointer-Gefriggel....aber man wusste wenigstens was passiert.
Hier mit FMX weiß man vorher ja nicht mehr was passiert und wo ist denn da die Erleichterung? Boah ey...ich bin zu alt für so ne Scheiße.

Sorry, aber jetzt gehts mir besser.

Und ich werde weiter mit D10.3 und FMX rumspielen.
Und weiterhin nicht jugendfreie verbale Auswürfe von mir geben....
Kai
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.117 Beiträge
 
Delphi 12 Athens
 
#8

AW: Problem mit FMX.TImage

  Alt 24. Mär 2021, 08:51
Das Gute ist, man muss es nur einmal fixen bis es läuft wie gewünscht, danach geht es dann auch.
  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 03:43 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