glHistogram: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (falscher Hinweis korrigiert)
(Siehe auch)
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glHistogram =
 
= glHistogram =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
'''glHistogram''' - definiert, wie die Daten eines Histogramms gespeichert werden sollen.
+
'''glHistogram''' - definiert eine [[Histogramm]]-Tabelle.
  
  
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  procedure '''glHistogram'''(''target'' : TGLenum; ''width'' : TGLsizei; ''internalformat'' : TGLenum;
+
  procedure '''glHistogram'''(''target'' : TGLenum; ''width'' : TGLsizei;  
                      ''sink'' : TGLboolean)
+
                      ''internalformat'' : TGLenum; ''sink'' : TGLboolean)
  
  
Zeile 15: Zeile 16:
 
{| border="1" rules="all"
 
{| border="1" rules="all"
 
! ''target''  
 
! ''target''  
| Muss einer der folgenden Konstanten sein:  '''GL_HISTROGRAM''' oder '''GL_PROXY_HISTOGRAM'''.
+
| Das Histogramm, dessen Parameter gesetzt werden. Muss einer der folgenden Konstanten sein:  '''GL_HISTROGRAM''' oder '''GL_PROXY_HISTOGRAM'''.
 
|-
 
|-
 
! ''width''
 
! ''width''
Zeile 24: Zeile 25:
 
|-
 
|-
 
! ''sink''  
 
! ''sink''  
| Flag, ob die Pixel nach der Histogramm-Operation in den nächsten Prozess der [[Imaging Pipeline]] geschickt werden sollen ([[glMinmax]]).
+
| Falls '''GL_TRUE''', werden die Pixel durch den Histogramm-Prozess zerstört und es findet kein Zeichnen oder Laden einer Textur statt. Falls '''GL_FALSE''', werden die Pixel nach dem Histogramm-Schritt zum Minmax-Prozess weitergeleitet.
 
|}
 
|}
  
 
== Beschreibung ==  
 
== Beschreibung ==  
'''glHistogram''' kann für zwei Methoden verwendet werden: Ist ''target'' auf '''GL_PROXY_HISTOGRAM''' gesetzt, so wird geprüft, ob genügend Ressourcen zur Verfügung stehen, um intern ein Histogramm mit der angegebenen Grösse, dem Format und der Auflösung abzuspeichern.
+
[[Bild:Histogramm.png|right|framed|Das Histogramm des DGL-Wiki Logos.]]
Ist dies nicht der Fall, so werden all diese Werte auf 0 gesetzt.
+
Wenn '''GL_HISTOGRAM''' aktiviert ist, werden die RGBA-Farbkomponeten zu Histogramm-Tabellenindizes durch Mapping auf den Bereich [0, 1] konvertiert, mit der Breite der Histogramm-Tabelle multipliziert und auf den nächsten Integer-Wert gerundet. Die durch die RGBA-Indizes ausgewählten Tabelleneinträge werden dann erhöht. (Falls das interne Format der Histogramm-Tabelle die Helligkeits-Komponente enthält, bestimmt der von der R-Farbkomponente abgeleitete Index den zu erhöhenden Helligkeits-Tabelleneintrag.) Falls ein Histogramm-Tabelleneintrag über seinen Maximalwert erhöht wird, wird sein Wert undefiniert (Dies ist kein Fehler.)
  
Die Ergebnisse des Proxy-Kommandos können mit [[glGetHistogramParameter]] abgefragt werden.
+
[[Histogramm|Histogramme]] werden nur für RGBA-Pixel ausgeführt (auch wenn diese ursprünglich als Color-Indizes definiert und ins RGBA-Format durch Indextabellen-Lookup konvertiert wurden). Histogramme werden mit [[glEnable]] aktiviert und mit [[glDisable]] dekaktiviert.
  
Übergibt man '''GL_HISTOGRAM''' an ''target'', werden die Parameter für das Histogramm gesetzt.
+
Wenn ''target'' '''GL_HISTOGRAM''' ist, definiert [[glHistogram]] die aktuelle Histogramm-Tabelle mit ''width'' Einträgen des durch ''internalformat'' angegebenen Formats. Die Einträge werden von 0 bis ''width'' - 1 indiziert und alle Einträge werden mit 0 initialisiert. Die Werte in der vorherigen Histogramm-Tabelle, falls welche existierten, gehen verloren. Falls ''sink'' '''GL_TRUE''' ist, werden die Pixel nach der Histogramm-Operation aufgegeben; keine weiteren Pixelverarbeitungen finden statt und kein Zeichnen, Texturladen oder Zurücklesen von Pixel wird darauf folgen.
''internalformat'' gibt dabei an, für welche Komponenten des Bildes ein Histogramm erstellt werden soll.
 
Alle Werte des Histogramms werden auf 0 gesetzt. Alle mit '''glHistogram''' vorher gesetzten Histogramme gehen verloren.
 
  
''width'' gibt an, wieviel Einträge das Histogramm haben soll. Die Farbwerte des Bildes werden dann in dementsprechende Bereiche eingeteilt und statistisch ausgewertet.
+
Wenn ''target'' gleich '''GL_PROXY_HISTOGRAM''' ist, berechnet '''glHistogram''' alle Zustandsinformationen, als ob die Histogramm-Tabelle definiert werden würde, definiert selbst aber keine neue Tabelle. Falls die abgefragte Histogramm-Tabelle zu groß ist, um unterstützt zu werden, werden die Zustandsinformationen auf 0 gesetzt. Dies sichert eine Möglichkeit zu bestimmen, ob eine Histogramm-Tabelle mit den gegebenen Parameter unterstützt werden kann.
Genauer : Falls die Breite nicht 0 ist werden die Farbwerte zuerst auf den Bereich [0,1] gemapped, mit ''width'' - 1 multipliziert und auf den nächsten Integerwert gerundet.
+
 
Beispiel : wird  bei einer Farbauflösung von 8 Bit (256 verschiedene Farbwerte möglich) der Wert 64 für ''width'' gesetzt, so werden für das Histogramm immer 256 / 64 = 4 Farbkomponenten zusammen als eine gezählt.
+
<br>
 
 
Mit dem Parameter ''sink'' wird bestimmt, wie nach der Histogramm-Operation fortgefahren werden werden soll. Bei '''GL_TRUE''' werden die Pixel in der Pipeline nicht weitergeleitet, ansonsten werden sie anschliessend mit dem Befehl [[glGetMinmax]] ausgewertet.
 
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 50: Zeile 47:
 
Der Höchstwert für den Parameter ''width'' ist implementierungsabhängig, muß aber mindestens 32 sein.
 
Der Höchstwert für den Parameter ''width'' ist implementierungsabhängig, muß aber mindestens 32 sein.
  
Histogramme können nur auf RGBA-Komponenten angewendet werden.
+
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
Zeile 65: Zeile 62:
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glHistogram''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glHistogram''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
  
<br>
+
 
  
 
== Zugehörige Wertrückgaben ==
 
== Zugehörige Wertrückgaben ==
Zeile 72: Zeile 69:
 
== Siehe auch ==
 
== Siehe auch ==
 
[[glGetHistogram]], [[glResetHistogram]]
 
[[glGetHistogram]], [[glResetHistogram]]
 +
 +
Hintergrundwissen: [[Histogram]]
 +
  
 
[[Kategorie:GL|Histogram]]
 
[[Kategorie:GL|Histogram]]

Aktuelle Version vom 1. Februar 2007, 15:27 Uhr

glHistogram

Name

glHistogram - definiert eine Histogramm-Tabelle.


Delphi-Spezifikation

procedure glHistogram(target : TGLenum; width : TGLsizei; 
                      internalformat : TGLenum; sink : TGLboolean)


Parameter

target Das Histogramm, dessen Parameter gesetzt werden. Muss einer der folgenden Konstanten sein: GL_HISTROGRAM oder GL_PROXY_HISTOGRAM.
width Anzahl der Einträge des Histogramms. Muss eine Zahl vom Typ 2^n (n: Integer) sein. (2,4,8,16,...)
internalformat Das interne Format der Histogramm-Daten. Zulässige Werte sind GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_R3_G3_B2, GL_RGB, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12 und GL_RGBA16.
sink Falls GL_TRUE, werden die Pixel durch den Histogramm-Prozess zerstört und es findet kein Zeichnen oder Laden einer Textur statt. Falls GL_FALSE, werden die Pixel nach dem Histogramm-Schritt zum Minmax-Prozess weitergeleitet.

Beschreibung

Das Histogramm des DGL-Wiki Logos.

Wenn GL_HISTOGRAM aktiviert ist, werden die RGBA-Farbkomponeten zu Histogramm-Tabellenindizes durch Mapping auf den Bereich [0, 1] konvertiert, mit der Breite der Histogramm-Tabelle multipliziert und auf den nächsten Integer-Wert gerundet. Die durch die RGBA-Indizes ausgewählten Tabelleneinträge werden dann erhöht. (Falls das interne Format der Histogramm-Tabelle die Helligkeits-Komponente enthält, bestimmt der von der R-Farbkomponente abgeleitete Index den zu erhöhenden Helligkeits-Tabelleneintrag.) Falls ein Histogramm-Tabelleneintrag über seinen Maximalwert erhöht wird, wird sein Wert undefiniert (Dies ist kein Fehler.)

Histogramme werden nur für RGBA-Pixel ausgeführt (auch wenn diese ursprünglich als Color-Indizes definiert und ins RGBA-Format durch Indextabellen-Lookup konvertiert wurden). Histogramme werden mit glEnable aktiviert und mit glDisable dekaktiviert.

Wenn target GL_HISTOGRAM ist, definiert glHistogram die aktuelle Histogramm-Tabelle mit width Einträgen des durch internalformat angegebenen Formats. Die Einträge werden von 0 bis width - 1 indiziert und alle Einträge werden mit 0 initialisiert. Die Werte in der vorherigen Histogramm-Tabelle, falls welche existierten, gehen verloren. Falls sink GL_TRUE ist, werden die Pixel nach der Histogramm-Operation aufgegeben; keine weiteren Pixelverarbeitungen finden statt und kein Zeichnen, Texturladen oder Zurücklesen von Pixel wird darauf folgen.

Wenn target gleich GL_PROXY_HISTOGRAM ist, berechnet glHistogram alle Zustandsinformationen, als ob die Histogramm-Tabelle definiert werden würde, definiert selbst aber keine neue Tabelle. Falls die abgefragte Histogramm-Tabelle zu groß ist, um unterstützt zu werden, werden die Zustandsinformationen auf 0 gesetzt. Dies sichert eine Möglichkeit zu bestimmen, ob eine Histogramm-Tabelle mit den gegebenen Parameter unterstützt werden kann.


Hinweise

glHistogram ist erst ab GL Version 1.2 oder höher nutzbar.

glHistogram ist nur verfügbar, wenn GL_ARB_imaging von glGetString mit dem Argument GL_EXTENSIONS zurückgeliefert wird.

Der Höchstwert für den Parameter width ist implementierungsabhängig, muß aber mindestens 32 sein.


Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn target keinen der zulässigen Werte hat.

GL_INVALID_ENUM wird generiert, wenn internalformat keinen der zulässigen Werte hat.

GL_INVALID_VALUE wird generiert, wenn width kleiner als 0 ist oder nicht vom Typ 2^n (n: Integer) ist.

GL_INVALID_VALUE wird generiert, wenn sink weder den Wert GL_TRUE noch GL_FALSE hat.

GL_TABLE_TOO_LARGE wird generiert, wenn das angeforderte Histogramm zu groß und target auf GL_HISTOGRAM gesetzt ist.

GL_INVALID_OPERATION wird generiert, wenn glHistogram innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetHistogramParameter

Siehe auch

glGetHistogram, glResetHistogram

Hintergrundwissen: Histogram