###前提・実現したいこと
現在Canvasを用いて画像処理を行っているのですが、その処理速度が異常に遅いです。
具体的にどのような処理を行っているのかと申しますと、
1, あるボタンをクリックする
2, クリックされたボタンに対応したpng形式の画像をdrawImage()で描画する
3, 描画された画像のピクセルデータをgetImageData()で取得し、それを正規化(/255)したものを配列に格納する
4, 別のCanvas上に描画されている画像のピクセルデータに先ほど取得したピクセルデータを掛け算していく
5, 最終的に得られたものをputImageData()で描画する
という流れです。
この中で特に遅いと感じているのが、3の処理です。580px × 1580px の4枚の画像に対して行っています。ローカル(?)でやってみるとそこまでストレスなく動くのですが、ネットワークを介して行うと2,3秒くらいかかりかなりストレスです。(3と4の処理を切り離して確認してみたのですが、4の処理はサクサク動きます。ですので3の処理が原因なのかと…)
3の部分のコードは以下のような感じです。
(ここで、r_arr[i][j] = (src[idx] / 255).toFixed(5); としかしていないのは画像の1ピクセルごとのRGB値が全て同じ為です。)
###該当のソースコード
javascript
1var canvas_img = new Image; 2canvas_img.src = "picture/test1.png"; 3canvas_img.onload = function(){ 4 var canvas_shade = document.getElementById("shade_info"); 5 if(canvas_shade.getContext){ 6 var context_shade = canvas_shade.getContext("2d"); 7 context_shade.clearRect(0, 0, 580, 1580); 8 context_shade.drawImage(canvas_img, 0, 0, width, height); 9 //画像のピクセル情報を取得 10 var srcData = context_shade.getImageData(0, 0, width, height); 11 var src = srcData.data; 12 //ピクセル情報を配列に格納 13 for(var i = 0; i < height; i=(i+1)|0){ 14 for(var j = 0; j < width; j=(j+1)|0){ 15 var idx = (j + i * width) * 4; 16 r_arr[i][j] = (src[idx] / 255).toFixed(5); 17 } 18 } 19 } 20}
上記の処理を4つの画像に対して行っているということです。
この部分の処理速度を上げたいのですが何か良い方法はありますでしょうか?(何かライブラリを使うとか、ピクセルデータのやり取りの工夫等)
わかりにくい質問化とは思いますが、ご回答を頂けると助かります_(..)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/27 07:12