Μέθοδος NearestIndexedColor
Βρίσκει την πλησιέστερη εγγραφή ανάμεσα στις φυσικές υποδοχές παλέτας 8..63 και επιστρέφει τόσο τη δημόσια τιμή ColorIndex της όσο και τη φυσική υποδοχή
Η μέθοδος είναι διαθέσιμη τόσο στο IXLSWorkbook όσο και στο TXLSXWorkbook και δεν τροποποιεί την παλέτα ή την κατάσταση του βιβλίου εργασίας
Σύνταξη
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
Είσοδος
Το AArgb δέχεται μια τιμή $00RRGGBB 24 bit ή μια αδιαφανή τιμή $FFRRGGBB
Ένα byte άλφα μηδέν κανονικοποιείται σε $FF· οι μερικώς διαφανείς τιμές απορρίπτονται επειδή οι ευρετηριασμένες εγγραφές της παλέτας του βιβλίου εργασίας είναι αδιαφανείς
Αποτέλεσμα
| Πεδίο | Σημασία |
|---|---|
InputARGB | Το κανονικοποιημένο αδιαφανές χρώμα εισόδου |
ColorIndex | Ο δημόσιος δείκτης παλέτας από 1 έως 56 |
PaletteSlot | Η φυσική υποδοχή παλέτας BIFF ή OOXML από 8 έως 63 |
ARGB | Το κανονικοποιημένο αδιαφανές χρώμα που είναι αποθηκευμένο στην επιλεγμένη υποδοχή της παλέτας |
DistanceSquared | Η τετραγωνισμένη Ευκλείδεια απόσταση στον χρωματικό χώρο OKLab |
ExactMatch | True όταν η επιλεγμένη εγγραφή έχει τα ίδια κανάλια RGB με την κανονικοποιημένη είσοδο |
Η συνάρτηση επιστρέφει false για μερικώς διαφανή είσοδο ή όταν η cache της παλέτας δεν είναι διαθέσιμη· σε αποτυχία το ColorIndex αρχικοποιείται σε μηδέν και το PaletteSlot σε -1
Σύμβαση αντιστοίχισης
Κάθε βιβλίο εργασίας κρατά στην cache τις κανονικοποιημένες συντεταγμένες ARGB και OKLab των 56 φυσικών εγγραφών της παλέτας του
Μια επαναφορά της παλέτας ξαναχτίζει ολόκληρη την cache και μια αποτελεσματική αλλαγή μίας υποδοχής ενημερώνει μόνο την αντίστοιχη cached υποδοχή
Κάθε ερώτημα μετατρέπει την είσοδο μία φορά και εκτελεί μία σταθερή σάρωση 56 εγγραφών, χωρίς ιστορικό ερωτημάτων ή απεριόριστη ανάπτυξη cache
Οι ίσες αποστάσεις επιλέγουν το χαμηλότερο δημόσιο ευρετήριο, συμπεριλαμβανομένων και των διπλότυπων χρωμάτων παλέτας, ώστε τα αποτελέσματα να παραμένουν ντετερμινιστικά ανάμεσα σε μηχανές και εκτελέσεις
Τα tokens αυτόματων, συστηματικών και άκυρων χρωμάτων δεν είναι υποψήφια· χρησιμοποιήστε την ResolveIndexedColor για να ταξινομήσετε αυτές τις τιμές
Παράδειγμα
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;