Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   PRGBTripleArray (https://www.delphipraxis.net/188870-prgbtriplearray.html)

holgerderchsler 14. Apr 2016 17:57

PRGBTripleArray
 
Hallo.

Ich habe einige Beiträge über Pixeloptimierung und Farben gelesen und als VCL Code auch problemlos umsetzen können. Nun ist meine Aufgabe, dies in einer FMX Umgebung zu programmieren und da fehlen mir schlicht Beispiele und Erfahrung. wie kann man zum Beispiel aus einem Image das in ein Bitmap umgewandelt wurde die einzelnen Farben auslesen und manipulieren?

Bin um jede Hilfe dankbar.

Liebe Grüsse Holger

Sir Rufo 14. Apr 2016 18:04

AW: PRGBTripleArray
 
Schau mal unter Delphi-Referenz durchsuchenTBitmapSurface

holgerderchsler 15. Apr 2016 08:37

AW: PRGBTripleArray
 
Super, danke

holgerderchsler 15. Apr 2016 15:21

AW: PRGBTripleArray
 
So, habe mir das mal angesehen mit den FMX.Surface und ein paar Funktionen ausprobiert, klappt auch. Was ich allerdings brauche sind die einzelnen Farbkanäle RGB um genau eine oder mehrere dieser Anteile zu ändern.

Holger

TiGü 15. Apr 2016 15:28

AW: PRGBTripleArray
 
Was ist deine konkrete Frage?
Was hast du denn bisher an Quelltext und wo genau scheitert es denn?

holgerderchsler 15. Apr 2016 18:20

AW: PRGBTripleArray
 
Ich muss bei meiner Anwendung die Subpixel eines Pixels ansprechen, die in die drei Farben rot, grün und blau unterteilt sind. Ich muss dann pro Pixel eine oder zwei Farben transparent machen. Die Anwendung ist komplex und soll schlussendlich einen 3D Monitor mit Prismentechnik ansteuern, der ohne Brille ein echtes 3D Bild anzeigt.

holgerderchsler 15. Apr 2016 18:21

AW: PRGBTripleArray
 
mit shader ist das Problem wohl lösbar

Medium 15. Apr 2016 19:02

AW: PRGBTripleArray
 
Zitat:

Zitat von holgerderchsler (Beitrag 1335698)
die Subpixel eines Pixels [..], die in die drei Farben [..] unterteilt sind

Die Aussage macht so keinen Sinn. Als Subpixel bezeichnet man es i.A., wenn man genauer als mit der ganzzahligen Pixel-Genauigkeit arbeitet. So ist z.B. (1,2; 2,8) ein Subpixel irgendwo zwischen (1;2) und (2;3). Was du vermutlich meinst nennt sich "Kanäle", oder genauer "Farbkanäle".* In diesem Zusammenhang werden auch nicht "Farben transparent gemacht", sondern es wird höchstens von der Farbe abhängig der Alphakanal versorgt.
Nenn mich einen Pedanten, aber ich finde gerade in der Informatik ist eine möglichst genaue Nomenklatur unverzichtbar.

*) Nun kann es, abhängig von der physischen Realisierung des konkreten Monitors her, natürlich sein, dass die 3 Farben in einer Schlitzmaske nebeneinander pro Pixel angelegt sind, und eine Farbe somit gleichzeitig einen Subpixel der Breite 1/3 ausmacht. Aber das ist a) nicht immer der Fall (und bei LCD-Bildschirmen auch recht unüblich, da hier meist die 3 Farben übereinander liegen), und b) für ein Programm im Rahmen von Delphi zunächst völlig transparent, und bestenfalls eine implizite Interpretation der Farbwerte durch den konkreten Monitor, der damit nicht dem zu erwartenden Standard angehört.

Daher nochmals: Was genau willst du erreichen, und was genau ist deine Ausgangssituation?

holgerderchsler 16. Apr 2016 02:41

AW: PRGBTripleArray
 
Ich denke das Problem ist nicht die Bezeichnung (Der Begriff Subpixel wird in der Anleitung des Monitors verwendet). Und es ist logisch, dass es sich hier nicht um einen normalen Monitor handelt, ich sagte ja das er mit Prismen also optischen Filtern arbeitet. Schlussendlich sollen getrennte Bilder für das Rechte und linke Auge simultan dargestellt werden. Zu diesem Zweck müssen bei einigen Pixeln entweder eine oder zwei Farbkanäle aus dem RGB verdeckt, entfernt oder transparent gemacht werden. Genau diese Farbe ist nämlich dann dem jeweils anderem Auge zugeteilt.

Ich hoffe diese Frage ist nun klarer.

Liebe Grüsse Holger

PS. Und danke an alle, die sich meines Problems überhaupt annehmen..

holgerderchsler 17. Apr 2016 10:40

AW: PRGBTripleArray
 
So, habe das Problem gelöst.

farbe := ModifiedData.GetPixel(X,Y);

txt1 := IntToHex(farbe,8); // Ausgangsfarbe
txt2 := Copy(txt1,1,2); // Alpha
txt3 := Copy(txt1,3,2); // ROT
txt4 := Copy(txt1,5,2); // GRUEN
txt5 := Copy(txt1,7,2); // BLAU


Der Rest ist auch nicht schwer.

txt6 := '$' + txt2 + txt3 + txt4 + '00'; // hier kann ich jede einzelne Farbe entfernen

ModifiedData.SetPixel(X, Y,StringToColor(txt6));

Wenn es eine schnellere Variante gibt, wäre ich dafür aufgeschlossen.

Liebe Grüsse Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Seite 1 von 2  1 2      

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