2011-03-25 16 views
8

System.Media.Colors içindeki renkleri görünür spektrumdaki konumuna göre (kırmızıdan maviye veya maviden kırmızıya doğru) sıralamak için en hızlı/kolay yol nedir? önemli değil)Görünür spektrumdaki konuma göre System.Media.Colors öğesini sıralayın

DÜZENLEME:

enter image description here

Bu muhtemelen teknik olarak doğru ama görsel olarak hala değil: İşte

sıralama (hue-> saturation-> parlaklık) sonucudur. Birisi sorunun ne olduğuna ışık tutabilir mi?

+0

Tek boyutlu bir sırada sürekli olarak üç boyutlu (renkli) bir alanı temsil etmek imkansızdır. Tam olarak ne elde etmeye çalışıyorsun? –

+0

İyi teşekkürler. Tam olarak bilmem gereken şey bu. Aksini düşündüm. – NVM

cevap

4

Renkleri tonuna göre sıralamak istiyorsunuz, öyle görünüyor. Bunu yapmak için, bir renk tonunu hesaplamanız gerekir ve Wpf System.Media.Color yapısını sizin için yapacak özellikleri içermez.

İki seçenek var:

  • el tonu hesaplayabilir. Bu gerçekten zor değil, ama dağınık: bir sürü sonra-sonra ifadeler. Örnek kod bunu can be found on devx yapıyor. Bu daha fazla iş ve daha az okunabilir, ama muhtemelen daha hızlı seçenek.
  • System.Drawing.Color.GetHue'u kullanabilirsiniz. Eski winform-dönemi System.Drawing renk yapısı tonu hesaplamayı destekliyor. Bu kodu gerçekten basit yapar; System.Drawing.Color.FromArgb(col.R, col.G, col.B).GetHue() gibi bir şey yeterli olacak - güzel ve kısa! Ancak, aynı isimlerle iki yapı ile uğraşacağınız anlamına gelir ve tabii ki System.Drawing.dll derlemine ro referansı gerekir. Bu tür metotlar yavaş olma eğilimindedir ve pek çok akıl sağlığı kontrolü yapar, bu yüzden performans kritikse, bu durum daha az çekici olacaktır.

Renk alanı üç boyutludur. Bir yöne göre sıralama yapabilmenize rağmen (burada ton gibi), sonuçtaki renk sıralaması sadece diğer iki yönü (HSB modelindeki doygunluk ve parlaklık) sabit tutarsanız sürekli görünür. Bu nedenle çoğu renk seçici, iki boyutlu bir gösterim seçer, ancak o zaman bile, sürekli bir degradeyi korumak için belirli bir renk seçici içinde bir boyut sabit bırakmanız gerekir.

+0

Mono'dan GetHue kodunu "basitçe" ödünç alabileceğini ve bir uzantı yöntemi oluşturabileceğini ekleyeceğim. Yaptığı şeyin tek sorunu, hesaplanmış bir sütun üzerinde sıraya koymasıdır (evet, erken optimizasyon). – xanatos

+0

Eh, bu çalışır, ancak tamamen değil. Bir cevap olarak 'işaretini kaldırmak'. – NVM

+0

Peki bu benim soruma cevap veriyor. İmkansız bir şey deniyor olsa da! – NVM

İlgili konular