Program aracılığıyla bir renginin solması
Motivasyon
Programlama yoluyla daha hafif bir sürüm için bir renk güzel bir degrade oluşturmak, böylece rasgele bir renk alıp birkaç ton hafifletmek için bir yol bulmak istiyorum. Degrade bir UI arka plan olarak kullanılacaktır.
Olasılık 1
Belli ki sadece RGB değerlerini bölünmüş ve ayrı ayrı belirli bir miktar bunları artıracağız. Gerçekten istediğim bu mu?
Olasılık 2
Benim ikinci düşünce dönüştürmek RGB HSV/HSB/HSL (Ton, Doygunluk, Değer/Parlaklık/Açıklık), artış parlaklığı biraz azaltmak doygunluğu biraz, ve sonra geri dönüştürmek için RGB. Bu genel olarak istenen etki yapar?
CEVAP
Wedge said, her şey daha güzel yapmak için çarpmak istiyorsun, ama tek renk (yani hit 255 ya da daha büyük) doymuş hale gelinceye kadar çalışır. Bu noktada, sadece 255, ama hafif hafif olsun renk değiştirme olacaksın değerleri kelepçe. Renk tutmak için, (orta-düşük)/oranı(en yüksek-en düşük) korumak istiyorum.
Burada Python iki işlev. Eğer üzerine giderlerse 255 ilk uygulayan sadece RGB değerlerini kelepçeler olan naif bir yaklaşım. İkinci renk olduğu gibi korumak için aşırı değerleri yeniden dağıtır.
def clamp_rgb(r, g, b):
return min(255, int(r)), min(255, int(g)), min(255, int(b))
def redistribute_rgb(r, g, b):
threshold = 255.999
m = max(r, g, b)
if m <= threshold:
return int(r), int(g), int(b)
total = r g b
if total >= 3 * threshold:
return int(threshold), int(threshold), int(threshold)
x = (3 * threshold - total) / (3 * m - total)
gray = threshold - x * m
return int(gray x * r), int(gray x * g), int(gray x * b)
Bir Gradyan RGB değeri (224,128,0) ile başlayan ve 1.0, 1.1, 1.2, ile çarpılarak vb yarattım. 2.0. Üst yarısı clamp_rgb
ve alt yarısını kullanarak redistribute_rgb
sonucudur sonucudur. Kolay taşıyor dağıtarak çok daha iyi bir sonuç, RGB renk alanı terk etmek zorunda kalmadan verdiğini görmek bence.
Karşılaştırma için, burada Python colorsys
modülü tarafından uygulanan HLS, ve HSV renk alanlarda aynı degrade. L
yalnızca bileşen değiştirildi ve kenetleme elde edilen RGB değerlerini yapıldı. Sonuçlar benzer, ama her piksel için renk alanı dönüşüm gerektirir.
UİCollectionView bir program aracılığı...
Bir C dizi program aracılığıyla boyutu...
Nasıl/android program aracılığıyla blu...
Nasıl windows service bir program arac...
nasıl android ekran boyutu Program ara...