在gpuimagerender里面有如下方法,GPUImage.ScaleType.CENTER_CROP表示剪裁,可以修改他的参数达到自己的需要。


    private void adjustImageScaling() {
        float outputWidth = mOutputWidth;
        float outputHeight = mOutputHeight;
        if (mRotation == Rotation.ROTATION_270 || mRotation == Rotation.ROTATION_90) {
            outputWidth = mOutputHeight;
            outputHeight = mOutputWidth;
        }


        float ratio1 = outputWidth / mImageWidth;
        float ratio2 = outputHeight / mImageHeight;
        float ratioMax = Math.max(ratio1, ratio2);
        int imageWidthNew = Math.round(mImageWidth * ratioMax);
        int imageHeightNew = Math.round(mImageHeight * ratioMax);


        float ratioWidth = imageWidthNew / outputWidth;
        float ratioHeight = imageHeightNew / outputHeight;


        float[] cube = CUBE;
        float[] textureCords = TextureRotationUtil.getRotation(mRotation, mFlipHorizontal, mFlipVertical);
        if (mScaleType == GPUImage.ScaleType.CENTER_CROP) {
            float distHorizontal = (1 - 1 / ratioWidth) / 2;
            float distVertical = (1 - 1 / ratioHeight) / 2;
            textureCords = new float[]{
                    addDistance(textureCords[0], distHorizontal), addDistance(textureCords[1], distVertical),
                    addDistance(textureCords[2], distHorizontal), addDistance(textureCords[3], distVertical),
                    addDistance(textureCords[4], distHorizontal), addDistance(textureCords[5], distVertical),
                    addDistance(textureCords[6], distHorizontal), addDistance(textureCords[7], distVertical),
            };
        } else {
            cube = new float[]{
                    CUBE[0] / ratioHeight, CUBE[1] / ratioWidth,
                    CUBE[2] / ratioHeight, CUBE[3] / ratioWidth,
                    CUBE[4] / ratioHeight, CUBE[5] / ratioWidth,
                    CUBE[6] / ratioHeight, CUBE[7] / ratioWidth,
            };
        }


        mGLCubeBuffer.clear();
        mGLCubeBuffer.put(cube).position(0);
        mGLTextureBuffer.clear();
        mGLTextureBuffer.put(textureCords).position(0);
    }

更多相关文章

  1. Android(安卓)GPS学习 (二) :GPS 服务启动以及初始化流程
  2. Android(安卓)studio新建activity运行出错解决方法
  3. Android学习之保持屏幕常亮的几种方法
  4. ActionBar setDisplayOptions 使用详解
  5. Android(安卓)通过字符串来获取R下面资源的ID 值
  6. 深入理解LayoutInflater
  7. Android(安卓)TableLayout表格布局
  8. Android(安卓)MediaPlayer研究问题
  9. Android中自定义DatePicker

随机推荐

  1. Android studio NDK开发
  2. Android 5.0 android:elevation 如果给bu
  3. 编译android版本的opencv 2.4.2
  4. 用Activity实现定制化的Dialog
  5. Android(OPhone) 学习笔记 - 地图(2)
  6. Android选择图片的两种方式
  7. Android HAL分析报告
  8. Google I/O大会发布Android Studio,安装与
  9. Android(安卓)-- sqlite数据库随apk发布
  10. Android中的Bmp图形格式(ALPHA_8,ARGB_44