私はJavaScriptプロジェクト(jqueryを使用)を持っており、その中にコードでキャンバスを描画し、その上に画像の配列を挿入します。エラーなしで問題なく表示されます。
問題: later on, i try to get these images inside from canvas to compare if they have the same src or the same id to don't replace it with the new image
私の機能は次のとおりです。
var inter;
var screen;
function onClick(id){
getScreen(id, function(data){
screen=window.open('',id,'width=' + data.maxX + ',height=' + data.maxY , true);
if (screen.document.getElementById("screen") != null ){
screen.document.getElementById("screen").innerHTML = "";
}
screen.document.write('<div id="screen"><canvas id="screenCanvas" width=' +
data.maxX + ' height=' + data.maxY +
' style="border:2px solid #000000;color:#000000;" ></canvas></div>');
draw(data);
inter = setInterval(function(){screen(id); }, 5000);
});
}
function screen(id){
getScreen(id, function(data){
if (screen.closed == true){
clearInterval(inter);
return;
}
if((screen.document.getElementById('screenCanvas').width != data.maxX) ||
(data.maxY != screen.document.getElementById('screenCanvas').height)){
screen.close();
screen=window.open('',id,'width=' + data.maxX + ',height=' + data.maxY , true);
screen=window.open('',id,'width=' + data.maxX + ',height=' + data.maxY , true);
if (screen.document.getElementById("screen") != null ){
screen.document.getElementById("screen").innerHTML = "";
}
screen.document.write('<div id="screen"><canvas id="screenCanvas" width=' +
data.maxX + ' height=' + data.maxY +
' style="border:2px solid #000000;color:#000000;" ></canvas></div>');
draw(data);
});
}
function draw(data) {
var canvas = screen.document.getElementById('screenCanvas');
var context = canvas.getContext('2d');
var tileY = 0;
var tileX = 0;
var counter = 0;
var tileWidth = data.tileWidth;
var tileHeight = data.tileHeight;
for (var i=0;i<(data.maxX/data.tileWidth);i++){
for (var j=0;j<(data.maxY/data.tileHeight);j++){
var img = new Image();
img.onload = (function(img, tileX, tileY, tileWidth, tileHeight){
return function() {
context.drawImage(img,tileX, tileY, tileWidth, tileHeight);
}
})(img, tileX, tileY, tileWidth, tileHeight);
img.src = "http://myserver:8080/images/screen/tile/" +
data.tiles[counter].imageId;
tileX = tileX + parseInt(data.tileWidth);
counter ++;
}
tileY = tileY + parseInt(data.tileHeight);
tileX = 0;
}
}
</script>
このコードは配列(data) that contains list of (id, maxX, maxY, tileWidth, tileHeight, tiles[x, y, imageId])
を取得して新しいウィンドウを開き、このウィンドウにキャンバスコードを書き込んで画像を描画し、タイマーを呼び出して5秒ごとに動作します。5秒ごとに、screenメソッドを呼び出してデータを再度取得し、screenが開いているかどうかを確認してから、すべての内部htmlを削除して新しいキャンバスを書き換え、サイズが変更されているかどうかをテストします。
このコードはエラーなしで正常に動作しますが、これらのコードを編集してキャンバス内の画像を取得し、同じimageIdを持っていることをテストする必要があります。再度ダウンロードしないでください(画像IDを保存せず、画像を取得するには、 img.idに保存するか、srcで画像を取得できます。これは、imageIdが画像パスの一部であるためです。
ノート:
id[unique](is the id of the user),
maxX(maximum width of the screen),
maxY(maximum height of the screen),
tileWidth(width of each image),
tileHeight(height of each image),
tiles(list of images)
x(left position of the image)
y(top postion of the image)
imageId[unique](id of each image)
example: data[id:1,maxX:1920,maxY:1080,tileWidth:480,tileHeight:270,tiles:(x:2,y:1,imageId:1a)]
何か助けはありますか?