キャンバスと選択ボタンが2つあります。キャンバスはソースキャンバスからコピーした後にレンダリングされません
選択ボタンは、2番目のキャンバスの縮尺を変更するためのボタンです。
第1キャンバスの内容は第2キャンバスにコピーされます。
選択ボタンで縮尺を大きくすると、2番目のキャンバスのサイズと縮尺が完全に変わりますが、レンダリングが悪い(矩形とテキストがぼやけている)。
何が問題ですか?ここで
ソースコード(あなたはhttps://jsfiddle.net/0kqqnkmp/それを試すことができます):
<canvas id="canvas"></canvas>
<canvas id="canvas_second"></canvas>
<br>Choose your scale : <select onchange="change_scale(this);" autocomplete="off">
<option>0.5</option>
<option selected>1</option>
<option>1.5</option>
<option>2</option>
</select>
<script type="text/javascript">
//The canvas :
c = document.getElementById("canvas");
c.style.border = "solid #000000 1px";
//The second canvas :
c_second = document.getElementById("canvas_second");
c_second.style.border = "solid #000000 1px";
//Define the original width and height canvas :
ORIGINAL_WIDTH_CANVAS = 300;
ORIGINAL_HEIGHT_CANVAS = 300;
c.width = ORIGINAL_WIDTH_CANVAS;
c.height = ORIGINAL_HEIGHT_CANVAS;
c_second.width = ORIGINAL_WIDTH_CANVAS;
c_second.height = ORIGINAL_HEIGHT_CANVAS;
//The canvas context :
ctx = c.getContext("2d");
ctx_second = c_second.getContext("2d");
//Default scaling
scale = 1;
//Drawing function :
function draw()
{
//Clear the drawing :
ctx.clearRect(0, 0, ORIGINAL_WIDTH_CANVAS, ORIGINAL_HEIGHT_CANVAS);
//Drawing a red rectangle :
ctx.fillStyle = "#000000";
ctx.fillRect(5, 5, 50, 50);
//Drawing a text :
ctx.font = "normal bold 20px sans-serif";
ctx.fillText("Hello world", ORIGINAL_WIDTH_CANVAS-220, ORIGINAL_HEIGHT_CANVAS-10);
//Clear the drawing on the second canvas :
ctx_second.clearRect(0, 0, ORIGINAL_WIDTH_CANVAS, ORIGINAL_HEIGHT_CANVAS);
//Copy drawing on the second canvas :
ctx_second.drawImage(c, 0, 0);
}
//Function for scaling the second canvas :
function change_scale(this_select)
{
//Retrieve the scale value :
scale = parseFloat(this_select.value);
//Resize the second canvas :
c_second.width = ORIGINAL_WIDTH_CANVAS * scale;
c_second.height = ORIGINAL_HEIGHT_CANVAS * scale;
//Apply scaling on the second canvas :
ctx_second.scale(scale, scale);
}
//Draw :
setInterval("draw()", 300);
</script>
はどうもありがとうございましたが、コマンドは百のコード行を持っているので、私はキャンバス#2に描画するための同じコマンドを再発行することはできませんキャンバス#2に。 あなたの方法は非常に重いです。 – totoaussi
十分な公正。ビットマップがぼやけなくなるようにスケールする方法はないので、1ぼやけと2重の間で選択できます。 **重く固定する:**あなたの設計が許せば、関数内にキャンバス#1描画コマンドの100行をラップすることができます。次に、その単一の関数を使用してキャンバス#1に描画し、キャンバス#2に再描画することもできます。 – markE
ありがとう、私は選択がありません。別の描画関数が良い考えです。 – totoaussi