zoukankan      html  css  js  c++  java
  • j2me MIDP2.0 下实现的图片缩放函数

        /**
        * 图片缩放函数
         * 
    @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;
        }
  • 相关阅读:
    bzoj2564: 集合的面积(闵可夫斯基和 凸包)
    省选前做题记录
    loj#2978. 「THUSCH 2017」杜老师(乱搞)
    loj#6437. 「PKUSC2018」PKUSC(计算几何)
    洛谷P4501/loj#2529 [ZJOI2018]胖(ST表+二分)
    loj#6436. 「PKUSC2018」神仙的游戏(NTT)
    洛谷P4459/loj#2511 [BJOI2018]双人猜数游戏(博弈论)
    洛谷P4458 /loj#2512.[BJOI2018]链上二次求和(线段树)
    洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
    loj#6435. 「PKUSC2018」星际穿越(倍增)
  • 原文地址:https://www.cnblogs.com/zhaoguo435/p/1804177.html
Copyright © 2011-2022 走看看