Saya perlu menentukan apakah UIColor yang dipilih (dipilih oleh pengguna) gelap atau cerah, jadi saya bisa mengubah warna baris teks yang berada di atas warna itu, agar lebih mudah dibaca.
Berikut adalah contoh di Flash / Actionscript (dengan demo): http://web.archive.org/web/20100102024448/http://theflashblog.com/?p=173
Ada pemikiran?
Salam, Andre
MEMPERBARUI
Terima kasih atas saran semua orang, inilah kode yang berfungsi:
- (void) updateColor:(UIColor *) newColor
{
const CGFloat *componentColors = CGColorGetComponents(newColor.CGColor);
CGFloat colorBrightness = ((componentColors[0] * 299) + (componentColors[1] * 587) + (componentColors[2] * 114)) / 1000;
if (colorBrightness < 0.5)
{
NSLog(@"my color is dark");
}
else
{
NSLog(@"my color is light");
}
}
Sekali lagi terima kasih :)
Jawaban:
W3C memiliki yang berikut ini: http://www.w3.org/WAI/ER/WD-AERT/#color-contrast
Jika Anda hanya membuat teks hitam atau putih, gunakan kalkulasi kecerahan warna di atas. Jika di bawah 125, gunakan teks putih. Jika 125 atau lebih, gunakan teks hitam.
edit 1: bias terhadap teks hitam. :)
sunting 2: Rumus yang digunakan adalah ((Nilai merah * 299) + (Nilai hijau * 587) + (Nilai biru * 114)) / 1000.
sumber
NSArray *components = (NSArray *)CGColorGetComponents([UIColor CGColor]);
untuk mendapatkan larik komponen warna, termasuk alfa. Dokumen tidak menentukan urutannya tetapi saya berasumsi itu akan menjadi merah, hijau, biru, alfa. Juga, dari dokumen, "ukuran larik adalah satu lebih banyak dari jumlah komponen ruang warna untuk warna." - tidakBerikut adalah ekstensi Swift (3) untuk melakukan pemeriksaan ini.
Ekstensi ini berfungsi dengan warna abu-abu. Namun, jika Anda membuat semua warna dengan penginisialisasi RGB dan tidak menggunakan warna bawaan seperti
UIColor.black
danUIColor.white
, maka Anda dapat menghapus pemeriksaan tambahan.Tes:
Catatan: Diperbarui ke Swift 3 12/7/18
sumber
components[0]
. Seperti:let componentColorX: CGFloat = components[1]
Dengan menggunakan jawaban Erik Nedwidek, saya mendapatkan potongan kecil kode itu untuk memudahkan penyertaan.
sumber
UIColor whiteColor, grayColor, blackColor
.Swift3
sumber
Versi Swift 4
sumber
Solusi saya untuk masalah ini dalam kategori (diambil dari jawaban lain di sini). Juga dapat digunakan dengan warna skala abu-abu, yang pada saat penulisan ini tidak ada jawaban lain yang berfungsi.
sumber
Ekstensi Swift 3 yang lebih sederhana:
sumber
Jika Anda lebih suka versi blok:
sumber
Untuk segala sesuatu yang tidak keabu-abuan, kebalikan RGB suatu warna biasanya sangat kontras dengannya. Demo hanya membalikkan warna dan desaturasi (mengubahnya menjadi abu-abu).
Tetapi menghasilkan kombinasi warna yang menenangkan cukup rumit. Melihat :
http://particletree.com/notebook/calculating-color-contrast-for-legible-text/
sumber
Metode berikut adalah menemukan warna terang atau gelap dalam bahasa Swift berdasarkan warna putih.
Metode berikut adalah menemukan warna terang atau gelap di Swift menggunakan komponen warna.
sumber
Bagi saya yang hanya menggunakan CGColorGetComponents tidak berfungsi, saya mendapatkan 2 komponen untuk UIColors seperti putih. Jadi saya harus memeriksa color spaceModel terlebih dahulu. Inilah yang saya temukan yang akhirnya menjadi versi cepat dari jawaban @ mattsven.
Ruang warna diambil dari sini: https://stackoverflow.com/a/16981916/4905076
sumber
UIColor memiliki metode berikut untuk mengonversi ke ruang warna HSB :
sumber
Swift 5
Versi yang ditambahkan :sumber
UIColor
warnanya grayscale. Warna RGB acak tidak akan berfungsi dengan kode ini.Jika Anda ingin mengetahui kecerahan warna, berikut beberapa pseudo code:
Jika> 0,5 berarti cerah, dan sebaliknya gelap.
sumber