コード例 #1
0
  // ///////////////////////////////////////////////////////////////
  // 最临近插值算法----不考虑坐标的小数部分
  // 参数:img:要缩放的Image对象
  // dstW:目标图像宽
  // dstH:目标图像高
  // comp:组件参数,比如Applet
  // ///////////////////////////////////////////////////////////////
  public static Image simpleScale(Image img, int dstW, int dstH) {
    OperateImage OI = new OperateImage();
    int[] scaled, src;
    double widthFactor, heightFactor;
    int srcX = 0, srcY = 0, srcW, srcH;
    src = OI.takeImg(img, img.getWidth(null), img.getHeight(null));
    scaled = new int[dstW * dstH]; // 存放缩放后的图片
    srcW = img.getWidth(null);
    srcH = img.getHeight(null);

    widthFactor = srcW / (dstW + 0.0);
    // System.out.println("widthFactor:"+widthFactor);
    heightFactor = srcH / (dstH + 0.0);
    // System.out.println("heightFactor:"+heightFactor);
    for (int a = 0; a < dstH; a++)
      for (int b = 0; b < dstW; b++) {
        if ((b * widthFactor) % 1 >= 0.5) srcX = (int) (b * widthFactor) + 1;
        else srcX = (int) (b * widthFactor);
        if ((a * heightFactor) % 1 >= 0.5) srcY = (int) (a * heightFactor) + 1;
        else srcY = (int) (a * heightFactor);
        if (srcX > srcW - 1) srcX = srcW - 1;
        if (srcY > srcH - 1) srcY = srcH - 1;
        scaled[a * dstW + b] = src[srcY * srcW + srcX];
      }
    // System.out.println("最临近插值算法完成!");
    return OI.madeImg(scaled, dstW, dstH);
  }
コード例 #2
0
  // ///////////////////////////////////////////////////////////////
  // 双线性内插值算法
  // 参数:img:要缩放的Image对象
  // dstW:目标图像宽
  // dstH:目标图像高
  // comp:组件参数,比如Applet
  //
  // 公式:f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) +
  // uvf(i+1,j+1)
  //
  // ///////////////////////////////////////////////////////////////
  public static Image doubleLinearScale(Image img, int dstW, int dstH) {
    OperateImage OI = new OperateImage();
    Image imgTemp;
    int[] scaled, src;
    int srcW, srcH;
    int R, G, B;
    double widthFactor, heightFactor, tempX, tempY;
    // double srcX_float = 0.0, srcY_float = 0.0;// 坐标的小数部分
    // int srcX_int = 0, srcY_int = 0;// 坐标的整数部分
    src = OI.takeImg(img, img.getWidth(null), img.getHeight(null));
    ColorModel cm = ColorModel.getRGBdefault();
    for (int j = 0; j < src.length; j++) {
      R = cm.getRed(src[j]);
      G = cm.getGreen(src[j]);
      B = cm.getBlue(src[j]);
      if (R >= 200 && G >= 200 && B >= 200) src[j] = 0xffffffff;
      else src[j] = 0xff000000;
    }
    scaled = new int[dstW * dstH]; // 存放缩放后的图片
    srcW = img.getWidth(null);
    srcH = img.getHeight(null);

    widthFactor = srcW / (dstW + 0.0);
    // System.out.println("widthFactor:"+widthFactor);
    heightFactor = srcH / (dstH + 0.0);
    // System.out.println("heightFactor:"+heightFactor);
    for (int a = 0; a < dstH; a++)
      for (int b = 0; b < dstW; b++) {
        tempX = b * widthFactor;
        tempY = a * heightFactor;
        scaled[a * dstW + b] = getDestPixle(src, srcW, srcH, tempX, tempY);
      }
    // System.out.println("双线性内插值算法完成!");
    imgTemp = OI.madeImg(scaled, dstW, dstH);
    ImageFilter filter = new BWFilter();
    return Toolkit.getDefaultToolkit()
        .createImage(new FilteredImageSource(imgTemp.getSource(), filter));
    // return imgTemp;
  }
コード例 #3
0
  // ///////////////////////////////////////////////////////////////
  // 最临近插值算法--考虑坐标的小数部分
  // 参数:img:要缩放的Image对象
  // dstW:目标图像宽
  // dstH:目标图像高
  // comp:组件参数,比如Applet
  // ///////////////////////////////////////////////////////////////
  public static Image simpleScaleSpcial(Image img, int dstW, int dstH) {
    OperateImage OI = new OperateImage();
    int[] scaled, src;
    double widthFactor, heightFactor, tempX, tempY, distance, tempDis;
    double srcX_float = 0.0, srcY_float = 0.0; // 坐标的小数部分
    int srcX_int = 0, srcY_int = 0; // 坐标的整数部分
    int srcX = 0, srcY = 0, srcW, srcH;
    src = OI.takeImg(img, img.getWidth(null), img.getHeight(null));
    scaled = new int[dstW * dstH]; // 存放缩放后的图片
    srcW = img.getWidth(null);
    srcH = img.getHeight(null);

    widthFactor = srcW / (dstW + 0.0);
    // System.out.println("widthFactor:"+widthFactor);
    heightFactor = srcH / (dstH + 0.0);
    // System.out.println("heightFactor:"+heightFactor);
    for (int a = 0; a < dstH; a++)
      for (int b = 0; b < dstW; b++) {
        distance = Double.MAX_VALUE;
        tempX = b * widthFactor;
        tempY = a * heightFactor;
        srcX_int = (int) tempX;
        srcX_float = tempX % 1;
        srcY_int = (int) tempY;
        srcY_float = tempY % 1;
        tempDis = (srcX_float * srcX_float) + (srcY_float * srcY_float);
        if (tempDis < distance)
        // 左上角 (0,0)
        {
          srcX = srcX_int;
          srcY = srcY_int;
          distance = tempDis;
        }
        tempDis = ((srcX_float - 1) * (srcX_float - 1)) + (srcY_float * srcY_float);
        if (tempDis < distance)
        // 右上角 (1,0)
        {
          srcX = srcX_int + 1;
          srcY = srcY_int;
          distance = tempDis;
        }
        tempDis = (srcX_float * srcX_float) + ((srcY_float - 1) * (srcY_float - 1));
        if (tempDis < distance)
        // 左下角 (0,1)
        {
          srcX = srcX_int;
          srcY = srcY_int + 1;
          distance = tempDis;
        }
        tempDis = ((srcX_float - 1) * (srcX_float - 1)) + ((srcY_float - 1) * (srcY_float - 1));
        if (tempDis < distance)
        // 右下角 (1,1)
        {
          srcX = srcX_int + 1;
          srcY = srcY_int + 1;
        }
        if (srcX > srcW - 1) srcX = srcW - 1;
        if (srcY > srcH - 1) srcY = srcH - 1;
        scaled[a * dstW + b] = src[srcY * srcW + srcX];
      }
    // System.out.println("最临近插值算法(特殊)完成!");
    return OI.madeImg(scaled, dstW, dstH);
  }
コード例 #4
0
ファイル: GenerateHtml.java プロジェクト: yhpdev/doit
  // 生成home页面的主文章列表html代码
  public String generateHomeMainHtml(List<TArticle> articles) throws Exception {
    String listHtml = "";
    if (articles != null) {
      int size = articles.size();
      for (int i = 0; i < size; i++) {
        TArticle article = articles.get(i);

        // 组织标签的html
        String tagsHtml = "";
        String[] tags = article.getArticle_Tag().split(",");
        for (int j = 0; j < tags.length; j++) {
          String tag = URLEncoder.encode(URLEncoder.encode(tags[j], "utf-8"));
          if (j == 0) {
            tagsHtml +=
                "<a title='"
                    + tags[j]
                    + "' rel='tag' href='/doit/search/"
                    + tag
                    + "/0/2/search' style='font-size:13px;'>"
                    + tags[j]
                    + "</a>";
          } else {
            tagsHtml +=
                " , <a title='"
                    + tags[j]
                    + "' rel='tag' href='/doit/search/"
                    + tag
                    + "/0/2/search' style='font-size:13px;'>"
                    + tags[j]
                    + "</a>";
          }
        }

        OperateString operateString = new OperateString();
        String contentHtml = article.getArticle_Content();
        // String contentHtml = "dsafkjbsdkds<pre class='brush: js;'>function
        // helloSyntaxHighlighter(){return 'hi!';}</pre><div class='ui segment '><img src='123.png'
        // /><IMG src='456.png' /></div>afkjbsdkdsafkjbsdk中文结尾";
        // 过滤图片
        OperateImage operateImage = new OperateImage();
        contentHtml = operateImage.filterImage(contentHtml);
        // 过滤html所有标签
        contentHtml = operateString.filterHtmlTag(contentHtml);
        // 截取字符串
        contentHtml = operateString.interceptCharacters(contentHtml, 0, 200);

        String item = "";
        item += "<div id='item" + article.getArticle_ID() + "' class='ui stacked segment'>";
        item += "	<h2 class='article_title'>";
        item +=
            "		<a href='/doit/show/"
                + article.getArticle_ID()
                + "' style='font-size:24px;'>"
                + article.getArticle_Title()
                + "</a>";
        item += "	</h2>";
        item += "	<h2></h2>";
        item += "	<div class='article_date'>";
        item +=
            "		<span property='dc:date dc:created' content='2013-11-10T12:30:01+08:00' datatype='xsd:dateTime' rel='sioc:has_creator' style='margin-right:20px;'>	发布时间 : "
                + article.getArticle_Date()
                + " </span>";
        item += "		<span style='color:#434A54;'>Tags : </span>";
        item += tagsHtml;
        item += "	</div>";
        item += "	<div class='row'>";
        item +=
            "		<a class='thumbnail' href='/doit/show/"
                + article.getArticle_ID()
                + "' style='float:left;width:240px;oveflow:hidden;'>";
        item +=
            "			<img src='"
                + article.getArticle_Cover()
                + "' style='height: 175px; width: 100%; display: block;' data-src='holder.js/100%x175'>";
        item += "		</a>";
        item +=
            "		<span id='artContent"
                + article.getArticle_ID()
                + "' class='sDiv article_content'>"
                + contentHtml
                + "</span>";
        item += "	</div>";
        item += "</div>";

        listHtml += item;
      }
    }
    System.out.println(listHtml);
    return listHtml;
  }