您的位置:首页 > 产品设计 > UI/UE

android gpuimage显示的缩放和剪裁模式

2016-05-26 11:35 639 查看
在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);

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android gpuimgae render