• 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;
        }
  • 相关阅读:
    使用canvas技术在网页上绘制鲜花
    java连接Access数据库
    L2-009. 抢红包
    L2-008. 最长对称子串
    L1-032. Left-pad
    L1-016. 查验身份证
    L1-005. 考试座位号
    L1-030. 一帮一
    L1-023. 输出GPLT
    L1-028. 判断素数
  • 原文地址:https://www.cnblogs.com/zhaoguo435/p/1804177.html
Copyright © 2020-2023  润新知