Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Cari Padanan Warna Terhampir dalam Susunan Warna?

Bagaimanakah Saya Boleh Cari Padanan Warna Terhampir dalam Susunan Warna?

Linda Hamilton
Lepaskan: 2024-12-31 09:58:12
asal
442 orang telah melayarinya

How Can I Find the Closest Color Match in a Color Array?

Padanan Warna Terhampir dalam Tatasusunan

Memandangkan susunan warna dan objek Warna yang berasingan, tugasnya adalah untuk menentukan padanan terdekat dalam tatasusunan kepada warna yang diberikan. Jarak warna ialah konsep subjektif, dan terdapat pelbagai cara untuk mengukurnya.

Kaedah Warna Sahaja

Kaedah ini memberi tumpuan semata-mata pada rona warna, mengabaikan ketepuan dan kecerahan. Ia mengira perbezaan mutlak antara warna warna calon dan warna yang diberikan. Warna calon dengan perbezaan rona terkecil dipilih.

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);
}
Salin selepas log masuk

Kaedah Ruang RGB

Kaedah ini mengukur jarak terus antara warna dalam ruang RGB. Ia mengira jarak Euclidean antara komponen R, G, dan B bagi warna calon dan warna yang diberikan. Warna calon dengan jarak terkecil dipilih.

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);
}
Salin selepas log masuk

Kaedah Wajaran

Kaedah ini memberikan pemberat kepada komponen warna, ketepuan dan kecerahan warna. Ia mengira jarak berwajaran dengan menggabungkan perbezaan rona dengan gabungan berwajaran ketepuan dan kecerahan. Warna calon dengan jarak wajaran terkecil dipilih.

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);
}
Salin selepas log masuk

Berdasarkan keperluan anda, anda boleh memilih kaedah yang paling sesuai dengan permohonan anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Padanan Warna Terhampir dalam Susunan Warna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan