分享下着图片缩放的方法,不过暂时无法支持所有机型,低端机还是有待考证。估计内存吃不消...
像NOKIA N7610 这个手机上使用这个方法,图片就是一个素色区域,无法正常显示。
便于理解PS下:手机上Image其实就是一个像素一个像素的话上去,理解这个就不难想到其相关的方法的原理了。
Java代码
- /**
- *
- * @param src
- * 需要变换的图片 图片变换比例 scales1:scales2
- * @param scales1
- * 新图片
- * @param scales2
- * 旧图片
- * @return
- */
- public Image scaleImage(Image src, int scales1, int scales2) {
- return transImage(src, src.getWidth() * scales1 / scales2, src
- .getHeight()
- * scales1 / scales2);
- }
- /**
- *
- * @param src
- * 需要变换的图片
- * @param w
- * 要变换的宽
- * @param h
- * 要变化的高
- * @return
- */
- public Image transImage(Image src, int w, int h) {
- int srcW = src.getWidth();// 图片的宽度
- int srcH = src.getHeight();// 图片的高度
- int dstW = w, dstH = h;
- Image tmp = Image.createImage(dstW, srcH); // 申请个宽为dstW高为srcH的图片空间
- Graphics g = tmp.getGraphics();
- int scale = 16;
- int delta = (srcW << scale) / dstW;// 扫描长度
- int pos = delta / 2;// 扫描位置
- for (int x = 0; x < dstW; x++) {
- g.setClip(x, 0, 1, srcH);
- g.drawImage(src, x - (pos >> scale), 0, Graphics.LEFT
- | Graphics.TOP);
- pos += delta;
- }
- Image dst = Image.createImage(dstW, dstH);
- g = dst.getGraphics();
- delta = (srcH << scale) / dstH;
- pos = delta / 2;
- for (int y = 0; y < dstH; y++) {
- g.setClip(0, y, dstW, 1);
- g.drawImage(tmp, 0, y - (pos >> scale), Graphics.LEFT
- | Graphics.TOP);
- pos += delta;
- }
- return dst;
- }