陪你在路上
║ ║ ║-往事不要再提-----人生已多风雨-║ ║ ║
    /**
    * 图片缩放函数
     * 
@param src 原图片
     * 
@param desW 缩放后的宽度
     * 
@param desH 缩放后的高度
     * 
@return 缩放后的图片
     
*/
    
public static Image ZoomImage(Image src, int desW, int desH){
        Image desImg 
= null;
        
int srcW = src.getWidth(); // 原始图像宽
        int srcH = src.getHeight(); // 原始图像高
        int[] srcBuf = new int[srcW * srcH]; // 原始图片像素信息缓存

        src.getRGB(srcBuf, 
0, srcW, 00, srcW, srcH);

        
// 计算插值表
        int[] tabY = new int[desH];
        
int[] tabX = new int[desW];

        
int sb = 0;
        
int db = 0;
        
int tems = 0;
        
int temd = 0;
        
int distance = srcH > desH ? srcH : desH;
        
for (int i = 0; i <= distance; i++) { /* 垂直方向 */
            tabY[db] 
= sb;
            tems 
+= srcH;
            temd 
+= desH;
            
if (tems > distance) {
                tems 
-= distance;
                sb
++;
            }
            
if (temd > distance) {
                temd 
-= distance;
                db
++;
            }
        }

        sb 
= 0;
        db 
= 0;
        tems 
= 0;
        temd 
= 0;
        distance 
= srcW > desW ? srcW : desW;
        
for (int i = 0; i <= distance; i++) { /* 水平方向 */
            tabX[db] 
= (short) sb;
            tems 
+= srcW;
            temd 
+= desW;
            
if (tems > distance) {
                tems 
-= distance;
                sb
++;
            }
            
if (temd > distance) {
                temd 
-= distance;
                db
++;
            }
        }

        
// 生成放大缩小后图形像素buf
        int[] desBuf = new int[desW * desH];
        
int dx = 0;
        
int dy = 0;
        
int sy = 0;
        
int oldy = -1;
        
for (int i = 0; i < desH; i++) {
            
if (oldy == tabY[i]) {
                System.arraycopy(desBuf, dy 
- desW, desBuf, dy, desW);
            } 
else {
                dx 
= 0;
                
for (int j = 0; j < desW; j++) {
                    desBuf[dy 
+ dx] = srcBuf[sy + tabX[j]];
                    dx
++;
                }
                sy 
+= (tabY[i] - oldy) * srcW;
            }
            oldy 
= tabY[i];
            dy 
+= desW;
        }

        
// 生成图片
        desImg = Image.createRGBImage(desBuf, desW, desH, false);
        
return desImg;
    }

 

posted on 2010-08-20 09:12  zhaoguo435  阅读(214)  评论(0编辑  收藏  举报