Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   FMX auf Bitmap invertiert zeichnen (https://www.delphipraxis.net/188931-fmx-auf-bitmap-invertiert-zeichnen.html)

luisk 20. Apr 2016 23:24


FMX auf Bitmap invertiert zeichnen
 
Hallo,
wie kann ich auf einem FMX Bitmap invertiert zeichnen,
so dass sich eine Linie oder ein Kreis farblich immer vom Hintergrund abhebt ?

bei VCL ging es z.B. so:
http://docwiki.embarcadero.com/CodeE...aphicsTPenMode
Delphi-Quellcode:
 image1.canvas.Pen.Mode:=pmNotXOR;
 image1.Canvas.MoveTo(0,0);
 image1.Canvas.LineTo(100,100);

Rollo62 21. Apr 2016 14:24

AW: FMX auf Bitmap invertiert zeichnen
 
Das Stichwort wäre XOR Brush.
Scheint es aber so in Fmx nicht zu geben, müsste man wohl schlimmstenfalls selber nachbauen.

http://stackoverflow.com/questions/1...d-cursor-color

https://delphiscience.wordpress.com/...ng/firemonkey/

Rollo

milos 21. Apr 2016 17:29

AW: FMX auf Bitmap invertiert zeichnen
 
Hallo,

sollte das nicht auch mit einer eigenen Matrix funktionieren?
Kenne mich damit leider nicht aus, habe jedoch ein mal was dazu gelesen, finde aber nicht viel dazu im Internet.

http://stackoverflow.com/questions/1...ey-rotate-text
http://www.delphipraxis.net/177311-f...uf-canvas.html

Freundliche Grüsse

Rollo62 21. Apr 2016 19:43

AW: FMX auf Bitmap invertiert zeichnen
 
Xor ist für den Schreibmode uf dem Canvas.
Das hat mit Matrix erstmal nichts zu tun.

Malst du ein Pixel kannst du normalerweise das alte überschreiben,
oder mit XOR die Pixelfarbe "umdrehen".

http://mrcoles.com/blog/canvas-compo...emo-animation/

Ist zwar kein Delphi, aber kann man schön mit rumspielen :-)


Edit:

http://www.delphipages.com/forum/sho...d.php?t=204385

Rollo

luisk 22. Apr 2016 19:06

AW: FMX auf Bitmap invertiert zeichnen
 
Zitat:

Zitat von Rollo62 (Beitrag 1336288)

das ist doch auch VCL.

Was meinen eigentlich die FMX-Profis hier an Bord :?:

Rollo62 22. Apr 2016 21:23

AW: FMX auf Bitmap invertiert zeichnen
 
Ja sorry, das war eher als Antwort für Milos gedacht :oops:

Ich vermute das man unter Fmx die Bitmaps selber anfassen und xor'ren muss.

Mit Map/Unmap, es sein denn jemand kommt mit einer besseren Idee (GPU-accelerated-crossplatform-compatible-code).

Rollo

Harry Stahl 23. Apr 2016 11:33

AW: FMX auf Bitmap invertiert zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich würde versuchen, mich hier mal von dem VCL-Ansatz zu lösen und Dinge auf dem Firemonkey-Way zu erledigen.

Statt hier auf die Bitmap-Pixel-Ebene herabzusteigen, würde ich lieber vorhandene Mittel aus dem Firemonkey-Baukasten verwenden.

Geht es wie hier anscheinend darum, ein zu zeichnendes Objekt sichtbar zu halten, auch wenn es die gleiche Farbe wie der Hintergrund hat, könnte man z.B. nur während des Zeichnungsvorgangs einen Gloweffect für das Objekt (z.B. TLine) verwenden, der dann die Umrisse vor dem Hintergrund abhebt.

Anliegend mal ein Screenshot, der das verdeutlicht. Hier wird gerade eine schwarze Linie gezeichnet, die sich erkennbar auch vor dem schwarzen Hintergrund abhebt (Anmerkung: Diese Funktionalität ist in der öffentlichen MAC-Version des PixPower-Editors neben anderen Dingen noch nicht drin).

Rollo62 23. Apr 2016 11:50

AW: FMX auf Bitmap invertiert zeichnen
 
Hallo Harry,

auch gute Idee.

Aber einen Firemonkey-Way habe ich auch noch, über Filter

Habe nicht reingeschaut, aber ich würde schwören das hier intern auch XOR verwendet wird.
Würde sich vielleicht lohnen mal zu sehen was im Code passiert.

Rollo

Harry Stahl 23. Apr 2016 12:18

AW: FMX auf Bitmap invertiert zeichnen
 
Das nutze ich auch, wenn ich z.B. eine ganze Bitmap invertieren will.

Allerdings ist es mit einem einfachen XOR nicht getan. FMX verwendet hier einen PixelShader, Einzelheiten kann man sich in der Unit "FMX.Filter.Standard" ansehen (nach "invert" suchen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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