canvas - 绘图 - 图像绘制(缩放demo)

html代码:
 

<!DOCTYPE html>
<html>
  <head>
    <title>Scaling image</title>
    <style>
        body {
          background: rgba(100, 145, 250, 0.3);
        }
        #scaleSlider {
          vertical-align:10px;
          width: 100px;
          margin-left: 90px;
        }
        #canvas {
          margin: 10px 20px 0px 20px;
          border: thin solid #aaa;
          cursor: crossshair;
        }
        #controls {
          margin-left: 15px;
          padding: 0;
        }
        #scaleOutput {
          position:absolute;
          width : 60px;
          height: 30px;
          margin-left: 10px;
          vertical-align: center;
          color: blue;
          font: 18px Arial;
          text-shadow : 2px 2px 4px rgba(100, 140, 250, 0.8);
        }
    </style>
  </head>
  <body>
    <div id="controls">
      <output id="scaleOutput"> 1.0</output>
      <input id="scaleSlider" type="range" min="1" max="3.0" step="0.01" value="1.0" />
    </div>
    <canvas id="canvas" width="800" height="520">
      canvas not supported
    </canvas>
    <script src="drawimage2.js"></script>
  </body>

</html>

 

js逻辑部分:

var canvas = document.getElementById('canvas'),
    context = canvas.getContext('2d'),
    image = new Image(),

    scaleSlider = document.getElementById('scaleSlider'),
    scale = 1.0,
    MININUM_SCALE = 1.0,
    MAXINUM_SCALE = 3.0;

    // function.......

    function drawImage() {
      var w = canvas.width,
          h = canvas.height,
          sw = w * scale,
          sh = h * scale;
      
      context.clearRect(0, 0, canvas.width, canvas.height);
      context.drawImage(image, -sw/2 + w/2, -sh/2 + h/2, sw, sh);
    }

    function drawScaleText(value) {
      var text = parseFloat(value).toFixed(2);
      var percent = parseFloat(value - MININUM_SCALE)/
                    parseFloat(MAXINUM_SCALE - MININUM_SCALE);

      scaleOutput.innerText = text;
      percent = percent < 0.35 ? 0.35 : percent;
      scaleOutput.style.fontSize = percent*MAXINUM_SCALE/1.5 + 'em';
    }

    // event handler
    scaleSlider.onchange = function(e) {
      scale = e.target.value;
      if(scale < MININUM_SCALE) scale = MININUM_SCALE;
      else if(scale > MAXINUM_SCALE) scale = MAXINUM_SCALE;

      drawScaleText(scale);
      drawImage();
    }

    // Initialization..................
    context.fillstyle = 'cornflowerblue';
    context.strokeStyle = 'yellow';
    context.shadowColor = 'rgba(50,50,50,1.0)';
    context.shadowOffsetX = 5;
    context.shadowOffsetY = 5;
    context.shadowBlur = 10;

    image.src = 'timg.1.jpeg';
    image.onload = function(e) {
      drawImage();
      drawScaleText(scaleSlider.value);
    }

 

Java中的Canvas绘图源码实例,主要是画线条、弧线、圆角矩形、三角形、文字、圆形等简单的几何图形,主要是通过创建DrawingCanvas对象canvas,为canvas设置命令监听者,实现接口CommandListener的方法,把缓冲区图像的内容绘制到画布上,画图部分代码:   int w = getWidth(); // 画布的宽度   int h = getHeight(); // 画布的高度   Image buffer = Image.createImage(w, h); // 用于绘图的缓冲图像   Graphics gc = buffer.getGraphics(); // 获取缓冲图像的图形环境   // 清除画布   public void clearScreen() {    gc.setColor(255,255,255); // 设置绘图颜色为白色    gc.fillRect(0,0,w,h); // 把缓冲图像填充为白色    gc.setColor(255,0,0); // 设置绘图颜色为红色   }   // 绘制直线   public void drawLine() {    setTitle("直线"); // 设置画布的标题    clearScreen(); // 清除画布    gc.drawLine(10,10,w-20,h-20); // 绘制黑色直线    gc.setColor(0,0,255); // 设置绘图颜色为蓝色    gc.drawLine(10,h/2,w-10,h/2); // 绘制蓝色直线   }   // 绘制弧   public void drawArc() {    setTitle("弧线和填充弧");    clearScreen();    gc.drawArc(5,5,w/2-20,h/2-20,60,216); // 绘制弧线    gc.drawArc(5,h/2-10,w/2-20,h/2-20,0,360); // 绘制圆    gc.setColor(0,0,255);    gc.fillArc(w/2,5,w/2-20,h/2-20,60,216); // 绘制填充弧线    gc.fillArc(w/2,h/2-10,w/2-20,h/2-20,0,360); // 绘制填充圆   }   // 绘制矩形   public void drawRect() {    setTitle("矩形和填充矩形");    clearScreen();    gc.drawRect(25,25,w/2-30,h/2-30); // 绘制矩形    gc.fillRect(w/2 25,25,w/2-30,h/2-30); // 绘制填充矩形   }   // 绘制圆角矩形   public void drawRoundRect() {    setTitle("圆角矩形和填充圆角矩形");    clearScreen();    gc.drawRoundRect(5,5,w-5-30,h/2-30,20,20); // 绘制圆角矩形    gc.setColor(0,0,255);    gc.fillRoundRect(5,h/2,w-30,h/2-30,20,20); // 绘制填充圆角矩形   }   // 绘制三角形   public void drawTriangle() {    setTitle("填充三角形");    clearScreen();    gc.fillTriangle(w/2, h/6, w/6, h/2, w/2, h/2);   }   // 绘制文字   public void drawText() {    setTitle("文字"); //设置标题    clearScreen();    gc.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_SMALL)); // 设置字体    gc.drawString("Hello World!",0,0,gc.TOP|gc.LEFT); // 使用当前字体绘制文字    gc.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD|Font.STYLE_UNDERLINED,Font.SIZE_LARGE));    gc.drawString("Hello
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值