USES COLOR; VAR S_RGB : SmallRGBPalette; B_RGB : BigRGBPalette; IA : BigIndexArray; RHPtr : RGBHistoPtr; Maxindex, I, J : INTEGER; ActGray, rStep : REAL; BEGIN Randomize; GetMem(RHPtr, SizeOf(RGBHistoArray) ); FOR I := 0 TO 255 DO FOR J := 0 TO 2 DO B_RGB[I, J] := RANDOM(63); InitRGBHistoArray(RHPtr, @B_RGB); FOR I := 0 TO 255 DO BEGIN { Histogramm zuf„llig erzeugen und fr NULLen sorgen: } RHPtr^.HistoCount[I] := -10000 + Random($FFFF); IF RHPtr^.HistoCount[I] < 0 THEN RHPtr^.HistoCount[I] := 0; END; { Nur 16 Farben ? } MaxIndex := GetUsedColors(RHPtr); IF MaxIndex <= 16 THEN BEGIN Writeln('Es wurden nur maximal 16 Farben verwendet.'); HALT(0); END; { Array nach Anzahl sortieren } SortRGBHistoArray(RHPtr, 255, SortByCount); { Aus RGB-Werten Grauwerte erzeugen } SetRGBHistoArrayGray(RHPtr); { Array bis Index I nach Grauwerten sortieren } SortRGBHistoArray(RHPtr, I, SortByGray); { Durchschnittsabstand der Farben ermitteln } rStep := GetColorDifference(RHPtr); { 16 Basisfarben nach Durchschnittsmethode festlegen } FillChar(S_RGB, SizeOf(SmallRGBPalette), 0); rStep := MaxIndex / 16; I := 0; J := 0; WHILE I < 16 DO BEGIN S_RGB[I, 0] := RHPtr^.RGBValues[J, 0]; S_RGB[I, 1] := RHPtr^.RGBValues[J, 1]; S_RGB[I, 2] := RHPtr^.RGBValues[J, 2]; INC(I); INC(J, ROUND(rStep) ); END; { Farben ber kleinste Differenz mappen } FOR I := 0 TO 255 DO BEGIN IA[I] := GetSmallRGBIndex(S_RGB, I, RHPtr); Write( I, ' RGB(', B_RGB[I][0], ',', B_RGB[I][1], ',', B_RGB[I][2], ') -> '); Writeln (IA[I], ' RGB(', S_RGB[IA[I],0], ',', S_RGB[IA[I],1], ',', S_RGB[IA[I],2], ')' ); END; END.