質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1489閲覧

ピクセル値を算出できない

th3

総合スコア38

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/02/27 02:34

編集2016/02/27 03:23

画像上でクリックした座標からのピクセル値を求めるプログラムなのですが、値を出すことができません。
原因がわからないです。

javascript

1var mx,my; 2var x,y; 3var col = new Array(); 4 5window.onload = function () { 6 var canvas = document.getElementById("c1"); 7 var ctx = canvas.getContext("2d"); 8 var img = new Image(); 9 var i ; 10 img.src = "/test/map.jpg"; 11 img.onload = function() { 12 ctx.drawImage(img, 0, 0); 13 var src = ctx.getImageData(0, 0, canvas.width, canvas.height); 14 var dst = ctx.createImageData(canvas.width, canvas.height); 15 for (var y = 0; y < canvas.height; y += 1) { 16 for (var x = 0; x < canvas.width; x += 1) { 17 var i = (y* canvas.width + x)*4; 18 var pixel = (src.data[i] + src.data[i+1] + src.data[i+2]) / 4; 19 dst.data[i] = dst.data[i+1] = dst.data[i+2] = pixel; 20 dst.data[i+3] = src.data[i+3]; 21 col[i] = dst.data[i]; 22 col[i+1] = dst.data[i+1]; 23 col[i+2] = dst.data[i+2]; 24 col[i+3] = dst.data[i+3]; 25 }} 26 ctx.putImageData(dst, 0, 0); 27 }; 28 canvas.onmousedown = (function(e) { 29 var rect = e.target.getBoundingClientRect(); 30 mx = e.clientX - rect.left; 31 my = e.clientY - rect.top; 32 for (var my = 0; my < my+20; my += 1) { 33 for (var mx = 0; mx < mx+20; mx += 1) { 34 var i = (my* (mx+20) + mx)*4; 35 console.log(col[i],col[i+1],col[i+2]); 36 37 } 38 } 39}); 40};

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shi_ue

2016/02/27 02:50

「 ```Javascript 」と「 ``` 」を上下に入れてみてください。見やすくなります。
shi_ue

2016/02/27 02:59

半角で・・・お願いします
shi_ue

2016/02/27 03:21 編集

何度もすみませんが、バッククオートshift+@です。これをコピペしてください。 ```
shi_ue

2016/02/27 03:23

おお!見やすくなりました。ありがとうです。
guest

回答1

0

ベストアンサー

理解できました。白黒にしてるんですね。

Javascript

1//以下修正 2 // for (var my = 0; my < my+20; my += 1) { 3 // for (var mx = 0; mx < mx+20; mx += 1) { 4 // var i = (my* (mx+20) + mx)*4; 5 // console.log(col[i],col[i+1],col[i+2]); 6 var pos = (my* canvas.width + mx)*4; 7 console.log(col[pos],col[pos+1],col[pos+2]);

こういうことじゃないですか?

また、わざわざ白黒にしているなら、colは色と元画像のアルファだけの単純な配列にすれば、1/2にすることができますね。さらにjpgがソースなら、アルファもいらないという・・・

投稿2016/02/27 03:27

編集2016/02/27 03:34
shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

th3

2016/02/27 03:35

何度もありがとうございます。 やはり、値は出ませんでした。
shi_ue

2016/02/27 03:39 編集

?? 提示していただいたコードを自分のローカル環境でやりましたが、うまくいきましたよ? もしかしたら、HTMLを直接ブラウザで開いてませんか? それだとcanvasの制限でうまく行きません。どこかにアップロードするかローカルサーバーを作ってみるといいですよ。
th3

2016/02/27 03:48

ローカルサーバーの立て方を調べたりしたのですが、全然わからなくて... getimagedataの部分でどうしても引っかかるので、色んな方法を試したりしたのですが、PCについて詳しくないので手詰み状態です。 canvsの制限を受けずに済む方法をどうか教えてください。 お願いします。
th3

2016/02/27 06:55

htmlと同じフォルダに入れている画像が読み込まれないのですが、これはどうしてでしょうか?
Lhankor_Mhy

2016/02/27 07:35

横からですが、 img.src = "/test/map.jpg"; を img.src = "map.jpg"; にしたらどうなりますでしょうか。
shi_ue

2016/02/27 07:45

Lhankor_Mhyさん、ナイスフォローです! そうそう、画像のパス間違ってました。
th3

2016/02/27 11:58

ファイルを外部から読み込むことで画像を表示させました! ただ、RGB値はいまだにnull状態ですが・・・
shi_ue

2016/02/27 12:12 編集

Chromeで実行すると、開発者ツールのコンソールに、 Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data. というエラーが出ます。 ローカル環境で、ローカルの画像でも出るので、サーバーを立てない限り、どんなに足掻いてもgetImageDataは実行できませんよ。これは仕様です。
shi_ue

2016/02/27 12:31

もう一つ質問を起こしているみたいですけど、どうしてそこまでローカルに拘るんですか? ローカルで動く何かを作っているんでしょうか? そうでなければ、開発用にローカルでウェブサーバーを動かしたほうが早いと思いますよ。 では、頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問