私は、線グラフのイメージを持っていて、かなりシンプルな、おそらく白い背景、黒の軸線、およびその線のいくつかの他の色を持っているとしましょう。私はキャンバスにイメージを変えるつもりです。キャンバスでそのラインを識別する方法があるかどうかを知りたいと思います。これは、私が行を操作するなど、多くのことをすることができます...チャートのイメージから作成したhtml5キャンバスの色付き線を特定できますか?
答えて
getImageData
を使用して色を識別することができますが、間違いなくあなたがやりたいと思う方法を使用して欠点があります。
相続人はあなたを約
// get the line
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height),
points = [];
for(var y=0; y<canvas.height; y++){
for(var x=0; x<canvas.width; x++){
if(imageData.data[(y * (canvas.height*4) + (x*4))+2] == 255){
points[x] = y;
}
}
}
// redraw the line with a y offset
ctx.strokeStyle = "rgb(255,0,0)";
ctx.beginPath();
for(var i = 0; i < points.length; i++){
ctx.lineTo(i, points[i]+20);
}
ctx.stroke();
ctx.closePath();
以上は何話して何をしての例は、255の青のしきい値を持っていますが、いずれかのラインが交差する場合、すべてのポイントを集めています、ピクセル値が異なるため、これはスローされます。
はい、それほど難しいことではありません。描画するすべてのものを追跡しておく必要があります(キャンバスを消去し、新しい座標ですべてを再び描画することによって)。
私はsimple tutorialオブジェクトを作成する方法(この場合は四角形)を作成して、再描画できるようにしています(チュートリアルではドラッグしています)。すべての原則は、そのような問題のために線などに適用される可能性があります。
サイドノートでは、このような単純な作業はSVGで非常に簡単です(その場での座標を変更できる保持された図面やマウスイベントなど)が既に実行されています。代わりにSVGを使用することを検討したいかもしれません。
私は最初の線グラフイメージを描画していません。これは、任意の線グラフのイメージです。 – iwek
申し訳ありませんが、Loktarの答えに近いものが必要です。私は本当にあなたがイメージでこれをやりたい理由を本当に疑問に思っています、間違った問題を解決するための正しい解決策を探しているかもしれません。 –
まず、画像をdrawImage()でキャンバス要素に描画し、キャンバスからピクセルデータを取得します。
var canvas = $("#yourCanvas");
var context = canvas.get(0).getContext("2d");
var image = new Image();
image.src = "imagename.jpg";
var imageData;
var pixels;
$(image).load(function() {
context.drawImage(image, 0, 0);
imageData = context.getImageData(0, 0, image.width, image.height);
pixels = imageData.data; // pixel data array of width*height*4 elements
// (r,g,b,alpha for every pixel)
});
context.clearRect(0, 0, canvas.width(), canvas.height());
これで、ピクセル値の配列を調べることができます。
var pos = 0; // index position into pixels array
for (y = 0; y < image.height; y++) {
for (x = 0; x < image.width; x++) {
var red = pixels[pos++];
var green = pixels[pos++];
var blue = pixels[pos++];
var alpha = pixels[pos++];
/* if is not black (red!=0, green!=0 and blue!=0) nor white (red!=255,
green!=255, blue!=255) it's the line are you looking for
so use context.lineTo(x,y); and start drawing the first point.. and so on */
}
}
私は完璧な0,0,0黒と完璧な255,255,255白を考えていることに留意してください。おそらく、実生活のアプリケーションを処理するためにいくつかのノイズリダクションを実装する必要があります。
- 1. HTML5キャンバス - 色付きの問題
- 2. HTML5キャンバスでアナグリフ3Dイメージを作成
- 3. イメージをhtml5キャンバスにワープすることはできますか?
- 4. iPhone - 下線付きのUIFontを作成しますか?
- 5. HTML5キャンバスからベクトルグラフィックスを書き出す
- 6. KineticJSを使用したHTML5キャンバスでの線形アニメーション。作成方法
- 7. html5キャンバスに線分を可変幅で描くことはできますか?
- 8. カードビューで色付きの境界線を設定する方法
- 9. 条件付きで線の色を設定する
- 10. html5キャンバスをダブルクリックしたときのオーバーレイフォーム
- 11. HTML5キャンバスで線をクリア
- 12. Charts.jsを使用したHTML5でのチャートの作成
- 13. イメージの「アンカーポイント」を別のイメージに作成できますか?
- 14. 大きいサイズのHTML5キャンバスが描いた線を引き伸ばすのはなぜですか?
- 15. 特定のクラスのインスタンスのArrayListを作成できますか?
- 16. 大きなデータセット用のjavascript/html5チャート作成ライブラリ
- 17. html5キャンバスでの動きjpeg
- 18. カスタムコントロール付きhtml5ビデオ/オーディオプレイリストプレーヤーを作成
- 19. html5キャンバス内の動きを制限していますか?
- 20. 大きなキャンバスにHTML5流体パーティクルを作成する
- 21. PictureBoxコントロールに色付きの枠線を作成するにはどうすればよいですか?
- 22. イメージをキャンバス上の円弧で描画できますか?
- 23. html5:キャンバスをイメージにコピーして戻す
- 24. html5キャンバスでの二重線ストローク
- 25. HTML5キャンバスから別のHTML5キャンバスにドラッグアンドドロップする方法
- 26. 特定のコンポーネントからページを作成したときにプログラムで余分なページを作成することはできますか?
- 27. アニメイト徐々に描かれた破線HTML5キャンバス&jqueryの
- 28. AWS CDN特定のS3オブジェクトバージョンの署名付きURLを作成
- 29. Windows 8のHTML5アプリケーションで特定の色を使用できない
- 30. 角度チャートを使用するときにデータポイントの色を関数で定義できますか? C3ライブラリで
ありがとうございます。しかし、私は線グラフ画像を描画していません、それは線グラフの単なる画像です。 – iwek
@iweczek私はちょうど例としていくつかの点をプロットしましたが、これも画像で動作しますが、カラーブリードに関する注意はまだ有効です。私が今日時間を取れば、誰かがそれに私を打ち負かさない限り、イメージとしきい値でデモを作ってください。 – Loktar
ありがとうございました。理想的には、マウスをクリックすると、画像内の線のピクセルと色が識別されます。私はこれがより複雑になることを知っているが、それは理想的だろう。 – iwek