キャンバス要素のサイズが(スタイルの変更によって)変更されると、キャンバスの描画された画像も拡大縮小したいと思います。キャンバス自体がクリアされるため、高さ/幅を変更することはできません。
- 一時的なキャンバス要素を作成する
- 現在のキャンバスのイメージをその一時的なキャンバスに描画します
- 現在のキャンバスのサイズを変更する
- 一時キャンバスの画像を現在のキャンバスに描画しますが、新しいサイズにスケーリングされます
これにより、多少のぼやけが生じます - 何度もサイズ変更すると非常に目立ちます (例: ドラッグしてサイズ変更する場合)。ぼやけずにこれを行うにはどうすればよいですか?
編集:画像のスムージング ( context.webkitImageSmoothingEnabled = false;
) をオフにしても問題は解決しません。何度もサイズ変更を行った後、画像が元のように見えなくなるまで、どんどんギザギザに再描画されます。
サイズ変更イベントで呼び出されます:
var tmpCanvas = null;
//Make a temporary canvas
tmpCanvas = document.createElement( "canvas" );
//Set its size to be equal
tmpCanvas.height = originalCanvas.height;
tmpCanvas.width = originalCanvas.width;
//Draw our current canvas onto it
tmpCanvas.getContext( "2d" ).drawImage( originalCanvas, 0, 0 );
//Set new dimensions
originalCanvas.width = originalCanvas.offsetWidth;
originalCanvas.height = originalCanvas.offsetHeight;
var originalContext = originalCanvas.getContext( "2d" );
//Set background and colors
originalContext.fillStyle = "#ffffff";
originalContext.strokeStyle = "#000000";
//Set paintbrush
originalContext.lineWidth = 4;
originalContext.lineCap = "round";
//Fill background as white
originalContext.fillRect( 0, 0, originalCanvas.width, originalCanvas.height );
//We have a saved signature
if ( SignatureCanvas.hasSignature === true )
{
//Draw it back but scaled (results in blurred image)
originalContext.drawImage( tmpCanvas, 0, 0, tmpCanvas.width, tmpCanvas.height, 0, 0, originalCanvas.width, originalCanvas.height );
/**
* This results in a blurred image as well
//Draw it back but scaled
originalContext.scale( originalCanvas.width / tmpCanvas.width, originalCanvas.height / tmpCanvas.height );
originalContext.drawImage( tmpCanvas, 0, 0, tmpCanvas.width, tmpCanvas.height, 0, 0, tmpCanvas.width, tmpCanvas.height );
*/
}
ストロークを取得し、それらすべてのポイントを「スケーリング」して再描画する方法はありますか?