متد NearestIndexedColor
نزدیکترین مدخل را میان خانههای فیزیکی پالت از 8 تا 63 مییابد و هم مقدار عمومی ColorIndex و هم خانه فیزیکی آن را برمیگرداند
این متد هم روی IXLSWorkbook و هم روی TXLSXWorkbook در دسترس است و وضعیت پالت یا کتاب کار را تغییر نمیدهد
نحو
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
ورودی
AArgb مقدار $00RRGGBB با عمق 24 بیت یا مقدار مات $FFRRGGBB را میپذیرد
بایت آلفای صفر به $FF نرمال میشود؛ مقادیر نیمهشفاف رد میشوند، زیرا مدخلهای پالت مفهرس کتاب کار مات هستند
نتیجه
| فیلد | معنی |
|---|---|
InputARGB | رنگ ورودی مات نرمالشده |
ColorIndex | اندیس عمومی پالت از 1 تا 56 |
PaletteSlot | خانه فیزیکی پالت BIFF یا OOXML از 8 تا 63 |
ARGB | رنگ مات نرمالشده ذخیرهشده در خانه منتخب پالت |
DistanceSquared | فاصله اقلیدسی به توان دو در فضای رنگ OKLab |
ExactMatch | True وقتی کانالهای RGB مدخل منتخب با ورودی نرمالشده یکسان باشند |
تابع برای ورودی نیمهشفاف یا وقتی حافظه پنهان پالت در دسترس نیست، false برمیگرداند؛ شکست، ColorIndex را صفر و PaletteSlot را 1- مقداردهی اولیه میکند
قرارداد تطبیق
هر کتاب کار مقادیر ARGB نرمالشده و مختصات OKLab مدخلهای فیزیکی 56گانه پالت خود را در حافظه پنهان نگه میدارد
بازنشانی پالت، حافظه پنهان کامل را بازسازی میکند و تغییر مؤثر یک خانه تنها همان خانه ذخیرهشده را بهروزرسانی میکند
هر پرسوجو ورودی را یک بار تبدیل میکند و اسکن ثابتی روی 56 مدخل انجام میدهد، بدون تاریخچه پرسوجو و بدون رشد نامحدود حافظه پنهان
فاصلههای برابر کمترین اندیس عمومی را برمیگزینند، از جمله برای رنگهای تکراری پالت، تا نتایج در میان موتورها و اجراها قطعی بمانند
توکنهای خودکار، سیستمی و رنگ نامعتبر نامزد نیستند؛ برای طبقهبندی آن مقادیر از ResolveIndexedColor استفاده کنید
مثال
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;