Cara Membandingkan Objek Warna dan Menentukan Padanan Terhampir dalam Susunan Warna
Memahami jarak warna boleh menjadi penting untuk tugas seperti pemilihan warna dan pemprosesan imej. Walaupun tiada takrifan muktamad bagi jarak warna, beberapa kaedah boleh digunakan untuk mengukurnya.
1. Perbandingan Hue Sahaja
Kaedah ini memfokuskan pada komponen rona warna sahaja, mengabaikan ketepuan dan kecerahan. Berikut ialah pelaksanaannya:
int closestColor1(List<Color> colors, Color target) { var hue1 = target.GetHue(); var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1)); var diffMin = diffs.Min(n => n); return diffs.ToList().FindIndex(n => n == diffMin); } float getHueDistance(float hue1, float hue2) { float d = Math.Abs(hue1 - hue2); return d > 180 ? 360 - d : d; }
2. Jarak RGB
Kaedah ini mengukur jarak terus antara warna dalam ruang RGB:
int closestColor2(List<Color> colors, Color target) { var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n); return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs); } int ColorDiff(Color c1, Color c2) { return (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)); }
3. Jarak Berwajaran
Kaedah ini mempertimbangkan warna, ketepuan dan kecerahan, dengan pemberat yang boleh disesuaikan:
int closestColor3(List<Color> colors, Color target) { 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); return diffs.ToList().FindIndex(n => n == diffMin); } float ColorNum(Color c) { return c.GetSaturation() * factorSat + getBrightness(c) * factorBri; } float getBrightness(Color c) { return (c.R * 0.299f + c.G * 0.587f + c.B *0.114f) / 256f; }
Untuk menggunakan kaedah ini, tukar tatasusunan Warna anda kepada Senarai
Pilihan kaedah optimum bergantung pada aplikasi tertentu dan aspek warna yang paling relevan.
Atas ialah kandungan terperinci Bagaimana untuk mencari padanan warna yang paling hampir dalam susunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!