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;
        }
  • 相关阅读:
    堆栈之链表实现
    队列之数组实现
    堆栈之数组实现
    线性表之循环双链表
    GMAP 集合已修改;可能无法执行枚举操作 错误【正解】(原创)
    大智慧选股公式
    获取股票实时交易数据的方法
    GMAP谷歌地图的纠偏 保密算法
    GMAP 判断一个坐标点是否在不规则多边形内部的算法
    SQL快速操作技巧2_datatable批量更新到数据表
  • 原文地址:https://www.cnblogs.com/zhaoguo435/p/1804177.html
Copyright © 2011-2022 走看看