"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تجد أقرب لون في صفيف اللون؟

كيف تجد أقرب لون في صفيف اللون؟

نشر في 2025-03-23
تصفح:806

How to Find the Closest Color in a Color Array?

في هذه المقالة ، سنستكشف ثلاث طرق مختلفة لإنجاز هذا:

مقاييس المسافة

1. مقارنة Hue-only:

هذه الطريقة تأخذ فقط بألوان الألوان ، وتجاهل التشبع والسطوع. يتم حساب المسافة الصلبة باستخدام طرح بسيط ، ويتم تحديد أقرب لون من خلال إيجاد الحد الأدنى للمسافة.

2. المسافة RGB:

هذه الطريقة تقيس المسافة المباشرة بين قيم RGB للألوان. يتم حساب اختلاف اللون كمسافة إقليدية في مساحة RGB ، ويتم العثور على أقرب لون عن طريق تقليل هذا الاختلاف.

3. تبنية مرجحة ، وتشبع ، ومقارنة السطوع:

تجمع هذه الطريقة بين اللون والتشبع والسطوع بطريقة مرجحة. يتم حساب السطوع المتصور ، ويتم حساب رقم اللون على أساس التشبع والسطوع. يتم تحديد أقرب لون من خلال تقليل المبلغ المرجح لفرق اللون ومسافة اللون.

التنفيذ

int extestcolor1 (قائمة الألوان ، هدف اللون) { var hue1 = target.gethue () ؛ var diffs = colors.select (n => gethuedistance (n.gethue () ، hue1)) ؛ var diffmin = diffs.min (n => n) ؛ إرجاع diffs.tolist (). findIndex (n => n == diffmin) ؛ } // مقارنة المسافة RGB int extestcolor2 (قائمة الألوان ، هدف اللون) { var colordiffs = colors.select (n => colordiff (n ، target)). min (n => n) ؛ return colors.findIndex (n => colordiff (n ، target) == colordiffs) ؛ } // صبغة مرجحة ، تشبع ، ومقارنة السطوع int extestcolor3 (قائمة الألوان ، هدف اللون) { float hue1 = target.gethue () ؛ var num1 = colornum (Target) ؛ var diffs = colors.select (n => math.abs (colornum (n) - num1) gethuedistance (n.gethue () ، hue1)) ؛ var diffmin = diffs.min (x => x) ؛ إرجاع diffs.tolist (). findIndex (n => n == diffmin) ؛ }

وظائف المساعد

// سطوع اللون كما هو متصور: float getBrightness (color c) => (c.r * 0.299f c.g * 0.587f c.b * 0.114f) / 256f ؛ // المسافة بين اثنين من الأشكال: تعويم gethuedistance (تعويم Hue1 ، hue2) => Math.ABS (Hue1 - Hue2)> 180؟ 360 - Math.abs (Hue1 - Hue2): Math.ABS (Hue1 - Hue2) ؛ // يزن بالتشبع والسطوع: تعويم colornum (اللون c) => // المسافة في مساحة RGB: int colordiff (color c1 ، color c2) => (int) math.sqrt ((c1.r - c2.r) * (c1.r - c2.r) (c1.g - c2.g) * (c1.g - c2.g) (c1.b - c2.b) * (c1.b - c2.b)) ؛ يعتمد المقياس على التطبيق المحدد. إذا كان Hue هو الاعتبار الأساسي ، فإن المقارنة بين Hue فقط كافية. لمزيد من مطابقة الألوان العامة ، توفر مسافة RGB أو أساليب مقارنة التشبع والشرع نتائج أكثر دقة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3