1. resizeImage完成功能
    给定一个srcWidth 宽srcHeight 长的Image,如何将之resize到screenWidth宽screenHeight长的新Image
  2. 源码
  3. /**
      * This methog resizes an image by resampling its pixels
      * @param src The image to be resized
      * @return The resized image
      */

      private Image resizeImage(Image src, int screenWidth, int screenHeight) {
          int srcWidth = src.getWidth();
          int srcHeight = src.getHeight();
          Image tmp = Image.createImage(screenWidth, srcHeight);
          Graphics g = tmp.getGraphics();
          int ratio = (srcWidth << 16) / screenWidth;
          int pos = ratio/2;

          //Horizontal Resize       

          for (int x = 0; x < screenWidth; x++) {
              g.setClip(x, 0, 1, srcHeight);
              g.drawImage(src, x – (pos >> 16), 0, Graphics.LEFT | Graphics.TOP);
              pos += ratio;
          }

          Image resizedImage = Image.createImage(screenWidth, screenHeight);
          g = resizedImage.getGraphics();
          ratio = (srcHeight << 16) / screenHeight;
          pos = ratio/2;       

          //Vertical resize

          for (int y = 0; y < screenHeight; y++) {
              g.setClip(0, y, screenWidth, 1);
              g.drawImage(tmp, 0, y – (pos >> 16), Graphics.LEFT | Graphics.TOP);
              pos += ratio;
          }
          return resizedImage;

      }//resize image   

 

很简洁的实现,并且效率很高。

Advertisements