答えて
では、次のようなHTML文書を持っていると仮定されるだろうと思います。
<canvas id="example" width="500" height="300"></canvas>
<ul id="list">
<h3>Click the canvas to extract colors</h3>
</ul>
私はあなたが持っているフィドルを作成しました私たちがそれをクリックするときに処理するいくつかの形と色を持つ既製のキャンバス。私はあなたのためのカラーピッカーを作成していない、それは元の答えだったとしてリストし、それの2番目の部分を達成するための手段として機能する必要があります。色を抽出
機能彼らは、私はそれだけで一例として機能し、十分に汎用的ではないので、すべてのキャンバスの描画のものをコピーし、次の回避していているリスト。
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);
}
}
}
これは、彼らはあなたがカラーピッカーをしたい場合(したがって、「一見」)、しかし、あなたがしたいこと、あなたの画像に表示される順序を表す進値の一見順不同リストを含む結果を生成します配列を黒から白の順に並べるcolorList.sort();
の使用を考えてみましょう。
私はrgb2hex
関数を使用して、16進形式に戻された値を変換しています。あなたが望んでいると仮定しています。もしrgbでOKならば、関数は次のようになります。
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]);
}
とソースは、私が考えることができると私はコード内のコメントとして述べたように、あなたがする必要が、私は最も一般的なシナリオのために行ってきました(そして最も単純な)場合、あなたは簡単すぎてアルファチャンネルを抽出することができ、thisですの。
これは良い投稿です。 +1 –
@DanKanze –
ありがとうございました。キャンバスがそれに描画されたときに、おそらく配列を使って少し遅くなるでしょう(Ok、あなたのキャンバスに数十万ピクセル以上はないでしょう。とにかく1600万色ではないが、私は逃げる)。些細な調整だけでなく、別の色を見つけることができるだけでなく、ヒストグラムを計算し、オブジェクトを辞書として使用して多数の色のアクセスを高速化することができます:http://jsfiddle.net/pcZCP/2 / – JayC
- 1. キャンバスにsvgを表示
- 2. キャンバスにDrawingVisualを表示
- 3. キャンバスの背景色が表示されない
- 4. イメージをキャンバス内で独自の中心で回転する
- 5. ジャスパーがhtmlに背景色を表示しない
- 6. MS Excelの色付きのHTMLテーブルを表示しますか?
- 7. Visual Studio(C++)での独自の型の構文の色付け
- 8. 自分のページ内に別のHTMLページを表示
- 9. ラベルに色を表示
- 10. HTMLキャンバスでサークルの色を変更するPong Animation on Paddleヒット
- 11. アンドロイドfingerpaintキャンバスの色
- 12. ColdFusion:独自の「独自のJavaクラス」の使用について
- 13. キャンバスに座標を表示する - JavaScript
- 14. キャンバス内にHTMLキャンバスをレンダリングする
- 15. 独自のビューコントローラテンプレート
- 16. 独自のロギングレベルの独自のログメソッドを作成する方法
- 17. htmlキャンバスで独立して2つの画像を回転させる方法
- 18. ページ上でhtmlを強調表示すると、単語の色が青色になりますが、青色の背景は表示されません。
- 19. Androidアプリケーションで独自のログファイルを表示することはできますか?
- 20. htmlテーブル内の行の色をPHPのxmlデータソースから交互に表示
- 21. HTMLキャンバスのスクロール
- 22. htmlの表のセルにリンクを表示
- 23. WPFキャンバスに表示される要素
- 24. 独自のカスタムスクリプトを使ってWordpressに独自のカスタムページを追加する
- 25. Android独自のアレイアダプター
- 26. パンダ:独自のデータフレーム
- 27. PHP独自のテキストフィールド?
- 28. as3独自のログインセッション
- 29. 独自のzバッファー
- 30. Android独自のボリュームコントロール
「固有の色」→「RGB/HEXカラーコード=可能なすべての色」を定義します。 –
編集した質問が誤解を招く可能性があります – lostsource
あなたのアプローチについてさらに詳しく説明できますか?あなたのキャンバスのスナップショットを撮って、各ピクセルを解析してRGB/HEXを決定しようとしていますか? –