Code example for Matrix

Methods: postTranslate, reset, setRectToRect, setScale, setTranslate

0
 
        if (bitmap == null) {
            return null; 
        } 
 
        mMatrix.reset();
 
        final int bWidth = bitmap.getWidth();
        final int bHeight = bitmap.getHeight();
 
        switch (mScaleType) {
 
            case CENTER_CROP: {
                // Center and scale the bitmap so that it entirely fills the 
                // given space. The bitmap ratio remains unchanged 
                float scale;
                float dx = 0, dy = 0;
 
                if (bWidth * mHeight > mWidth * bHeight) {
                    scale = (float) mHeight / (float) bHeight;
                    dx = (mWidth - bWidth * scale) * 0.5f;
                } else { 
                    scale = (float) mWidth / (float) bWidth;
                    dy = (mHeight - bHeight * scale) * 0.5f;
                } 
 
                mMatrix.setScale(scale, scale);
                mMatrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
                break; 
            } 
 
            case CENTER: {
                // Center bitmap without scaling 
                final int dx = (int) ((mWidth - bWidth) * 0.5f + 0.5f);
                final int dy = (int) ((mHeight - bHeight) * 0.5f + 0.5f);
                mMatrix.setTranslate(dx, dy);
                break; 
            } 
 
            case CENTER_INSIDE: {
                // Center and scale the bitmap so that it entirely fits into the 
                // given space. 
                float scale;
                float dx;
                float dy;
 
                if (bWidth <= mWidth && bHeight <= mHeight) {
                    scale = 1.0f;
                } else { 
                    scale = Math.min((float) mWidth / (float) bWidth, (float) mHeight
                            / (float) bHeight);
                } 
 
                dx = (int) ((mWidth - bWidth * scale) * 0.5f + 0.5f);
                dy = (int) ((mHeight - bHeight * scale) * 0.5f + 0.5f);
 
                mMatrix.setScale(scale, scale);
                mMatrix.postTranslate(dx, dy);
                break; 
            } 
 
            case FIT_XY:
            default: 
                // Entirely fills the space without respecting bitmap's ratio. 
                mTempSrc.set(0, 0, bWidth, bHeight);
                mTempDst.set(0, 0, mWidth, mHeight);
 
                mMatrix.setRectToRect(mTempSrc, mTempDst, Matrix.ScaleToFit.FILL);
                break; 
        } 
 
        Bitmap result = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
        Canvas canvas = new Canvas(result);