Bir HTML Tuvalinde çizilmiş olan renklerin listesini almak için verimli bir yol var mı? Bir HTML Canvas'da benzersiz renkleri listeleme
Doğru terim akım kompozitcevap
bir Renk Paleti olacağını tahmin Eğer böyle bir html belgesi var varsayalım aşağıdadır:
<canvas id="example" width="500" height="300"></canvas>
<ul id="list">
<h3>Click the canvas to extract colors</h3>
</ul>
Sana sahip olduğu bir keman yarattık Tıkladığımız zaman işleyeceğimiz bazı şekiller ve renkler ile hazır kanvas. Sizin için bir renk seçici oluşturmuyorum, sadece bunun orijinal cevabı olduğu gibi listelemek ve bunun ikinci kısmını elde etmek için bir araç olarak hizmet etmek zorundayım. renkleri ayıklar
fonksiyon onları, ben sadece örnek olarak işlev görür ve yeterli jenerik olmadığından tüm tuval çizim şeyler kopyalama şu kaçıyorum bir listeleri.
var colorList = []; //This will hold all our colors
function getColors(){
var canvas = document.getElementById('example');
var context = canvas.getContext('2d');
var imageWidth = canvas.width;
var imageHeight = canvas.height;
var imageData = context.getImageData(0, 0, imageWidth, imageHeight);
var data = imageData.data;
// quickly iterate over all pixels
for(var i = 0, n = data.length; i < n; i += 4) {
var r = data[i];
var g = data[i + 1];
var b = data[i + 2];
//If you need the alpha value it's data[i + 3]
var hex = rgb2hex("rgb("+r+","+g+","+b+")");
if ($.inArray(hex, colorList) == -1){
$('#list').append("<li>"+hex+"</li>");
colorList.push(hex);
}
}
}
Bu da bir renk seçici istiyorsanız (dolayısıyla 'görünüşte'), ancak kurmak isteyebileceğiniz görüntüde göründüğü sırayı temsil onaltılık değerler görünüşte sırasız listesini içeren bir sonuç verir Diziyi siyah-beyaz modaya sipariş edecek colorList.sort();
kullanımını düşünün.
Kullanmakta olduğunuzu varsayarak altıgen biçimine döndürülen değerleri dönüştürmek için rgb2hex
işlevini kullandığımı unutmayın, eğer rgb ile kullanmaktan çekiniyorsanız, işlev şu şekildedir:
function rgb2hex(rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
ve kaynak düşünebildiğim ben kodunda bir yorum olarak belirtildiği gibi, kolayca gerekiyordu ama en genel senaryo için giderse çok alfa kanalı ayıklamak (ve en basit) olabilir, this olduğunu arasında.
ayıklamak istiyorum bu iyi bir yazı. +1 –
Teşekkür ederiz @DanKanze –
Tuval bir bazilyon renkleri çizdiğinde bir dizi kullanarak muhtemelen biraz yavaş olacak (Tamam, muhtemelen tuvalinize birkaç yüz bin pikselden fazla olmayacak ve Yine de 16 milyon renk yok, ama ben digress). Bazı önemsiz ince ayarlarla, sadece farklı renkleri bulabilir, ancak bir histogramı hesaplayabilir ve bir nesneyi sözlük olarak kullanarak (zaten çok sayıda renk için) erişimi hızlandırabilirsiniz: http://jsfiddle.net/pcZCP/2 / – JayC
- 1. Bir DrawingBrush'ta renkleri nasıl değiştirebilirim?
- 2. Bloklardaki renkleri değiştirme
- 3. XSL kullanarak bir satırda değişen satır renkleri
- 4. Sıralama olmadan benzersiz benzersiz
- 5. Tüm SVN depolarını listeleme
- 6. Yinelenen segfault'u listeleme
- 7. TV rehberi listeleme API'si
- 8. Webdavlmayla değişiklik geçmişi listeleme
- 9. Veritabanındaki tüm tabloları listeleme
- 10. İlişkili modellerin adlarını listeleme
- 11. NullPointerException ile listeleme
- 12. Eşitsizlik kısıtlamasını listeleme
- 13. Listeleme Seçenekleri ekleme
- 14. PHP: listeleme alt dizinleri
- 15. tikzpicture içinde listeleme
- 16. WebSafe renkleri hakkında
- 17. Arabirimlerdeki arabirimlerde arabirimleri listeleme
- 18. Tüm sınıf özelliklerini listeleme
- 19. Java Swing düğmesi renkleri
- 20. Charts.js doğru renkleri kullanmıyor
- 21. cmd için renkleri etkinleştirme
- 22. jvectormap bölge renkleri
- 23. jvectorMap ülke renkleri
- 24. Visual studio satır renkleri
- 25. Bir DLL dışa aktarılan işlevlerini listeleme
- 26. Geçerli JAR dosyasının bir dizinindeki dosyaları listeleme
- 27. Belirli bir nesneyle ilgili gözlemcileri listeleme hakkında
- 28. Tar.gz'de bir derinlik düzeyinde dizinleri listeleme
- 29. UIView'nin belirli bir alanının renkleri nasıl çevrilir?
- 30. Eclipse - editör renkleri - sağlıklı bir yapılandırma
"benzersiz renkler" tanımlar -> RGB/HEX renk kodları = her renk mümkündür. –
, yanıltıcı olabileceği için soru düzenledi – lostsource
Yaklaşımınız hakkında daha fazla ayrıntıya girer misiniz? Tuvalinizin bir anlık görüntüsünü almaya ve ardından RGB/HEX'i belirlemek için her bir pikseli ayrıştırmaya mı çalışıyorsunuz? –