Android Open Source - ion Default Transform






From Project

Back to project page ion.

License

The source code is released under:

Apache License

If you think the Android project ion listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.koushikdutta.ion;
//from   w  w w.jav  a  2  s  . com
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;

import com.koushikdutta.ion.bitmap.Transform;

class DefaultTransform implements Transform {
    final ScaleMode scaleMode;
    final int resizeWidth;
    final int resizeHeight;

    public DefaultTransform(int width, int height, ScaleMode scaleMode) {
        resizeWidth = width;
        resizeHeight = height;
        // fixup ScaleMode to sane values.
        // no scale mode means that we are stretching, disregarding aspect ratio
        if (scaleMode == null)
            this.scaleMode = ScaleMode.FitXY;
        else
            this.scaleMode = scaleMode;
    }

    final static Paint bilinearSamplingPaint = new Paint(Paint.FILTER_BITMAP_FLAG);

    @Override
    public Bitmap transform(Bitmap b) {
        Bitmap.Config config = b.getConfig();
        if (config == null)
            config = Bitmap.Config.ARGB_8888;
        int resizeWidth = this.resizeWidth;
        int resizeHeight = this.resizeHeight;
        if (resizeWidth <= 0) {
            float ratio = (float)b.getWidth() / (float)b.getHeight();
            resizeWidth = (int)(ratio * resizeHeight);
        }
        else if (resizeHeight <= 0) {
            float ratio = (float)b.getHeight() / (float)b.getWidth();
            resizeHeight = (int)(ratio * resizeWidth);
        }

        RectF destination = new RectF(0, 0, resizeWidth, resizeHeight);
        ScaleMode scaleMode = this.scaleMode;

        if (scaleMode == ScaleMode.CenterInside) {
            // center inside, but bitmap bounds exceed the resize dimensions...
            // so change it to fit center.
            if (resizeWidth <= b.getWidth() || resizeHeight <= b.getHeight())
                scaleMode = ScaleMode.FitCenter;
        }

        if (scaleMode == ScaleMode.CenterInside) {
            float marginx = (resizeWidth - b.getWidth()) / 2f;
            float marginy = (resizeHeight - b.getHeight()) / 2f;
            destination.set(marginx, marginy, marginx + b.getWidth(), marginy + b.getHeight());
        }
        else if (scaleMode != ScaleMode.FitXY) {
            float ratio;
            float xratio = (float)resizeWidth / (float)b.getWidth();
            float yratio = (float)resizeHeight / (float)b.getHeight();
            if (scaleMode == ScaleMode.CenterCrop)
                ratio = Math.max(xratio, yratio);
            else
                ratio = Math.min(xratio, yratio);

            if (ratio == 0) return b;

            float postWidth = b.getWidth() * ratio;
            float postHeight = b.getHeight() * ratio;
            float transx = (resizeWidth - postWidth) / 2;
            float transy = (resizeHeight - postHeight) / 2;
            destination.set(transx, transy, resizeWidth - transx, resizeHeight - transy);
        }

        if (destination.width() == b.getWidth() && destination.height() == b.getHeight()
            && destination.top == 0 && destination.left == 0) {
            return b;
        }

        Bitmap ret = Bitmap.createBitmap(resizeWidth, resizeHeight, config);
        Canvas canvas = new Canvas(ret);

        canvas.drawBitmap(b, null, destination, bilinearSamplingPaint);
        return ret;
    }

    @Override
    public String key() {
        return scaleMode.name() + resizeWidth  + "x" + resizeHeight;
    }
}




Java Source Code List

com.koushikdutta.ion.BitmapCallback.java
com.koushikdutta.ion.BitmapFetcher.java
com.koushikdutta.ion.BitmapInfoToBitmap.java
com.koushikdutta.ion.ContextReference.java
com.koushikdutta.ion.DefaultTransform.java
com.koushikdutta.ion.DeferredLoadBitmap.java
com.koushikdutta.ion.FileCacheStore.java
com.koushikdutta.ion.HeadersCallback.java
com.koushikdutta.ion.HeadersResponse.java
com.koushikdutta.ion.ImageViewBitmapInfo.java
com.koushikdutta.ion.ImageViewFutureImpl.java
com.koushikdutta.ion.InputStreamParser.java
com.koushikdutta.ion.IonBitmapRequestBuilder.java
com.koushikdutta.ion.IonDrawable.java
com.koushikdutta.ion.IonImageViewRequestBuilder.java
com.koushikdutta.ion.IonLog.java
com.koushikdutta.ion.IonRequestBuilder.java
com.koushikdutta.ion.Ion.java
com.koushikdutta.ion.LoadBitmapBase.java
com.koushikdutta.ion.LoadBitmapEmitter.java
com.koushikdutta.ion.LoadBitmapRegion.java
com.koushikdutta.ion.LoadBitmap.java
com.koushikdutta.ion.LoadDeepZoom.java
com.koushikdutta.ion.Loader.java
com.koushikdutta.ion.ProgressCallback.java
com.koushikdutta.ion.RequestBodyUploadObserver.java
com.koushikdutta.ion.Response.java
com.koushikdutta.ion.ScaleMode.java
com.koushikdutta.ion.TransformBitmap.java
com.koushikdutta.ion.bitmap.BitmapDecodeException.java
com.koushikdutta.ion.bitmap.BitmapInfo.java
com.koushikdutta.ion.bitmap.Exif.java
com.koushikdutta.ion.bitmap.IonBitmapCache.java
com.koushikdutta.ion.bitmap.LocallyCachedStatus.java
com.koushikdutta.ion.bitmap.LruBitmapCache.java
com.koushikdutta.ion.bitmap.MarkableInputStream.java
com.koushikdutta.ion.bitmap.PostProcess.java
com.koushikdutta.ion.bitmap.SoftReferenceHashtable.java
com.koushikdutta.ion.bitmap.Transform.java
com.koushikdutta.ion.builder.AnimateGifMode.java
com.koushikdutta.ion.builder.BitmapBuilder.java
com.koushikdutta.ion.builder.BitmapFutureBuilder.java
com.koushikdutta.ion.builder.Builders.java
com.koushikdutta.ion.builder.FutureBuilder.java
com.koushikdutta.ion.builder.GsonFutureBuilder.java
com.koushikdutta.ion.builder.ImageViewBuilder.java
com.koushikdutta.ion.builder.ImageViewFutureBuilder.java
com.koushikdutta.ion.builder.LoadBuilder.java
com.koushikdutta.ion.builder.LoadImageViewFutureBuilder.java
com.koushikdutta.ion.builder.MultipartBodyBuilder.java
com.koushikdutta.ion.builder.RequestBuilder.java
com.koushikdutta.ion.builder.UrlEncodedBuilder.java
com.koushikdutta.ion.conscrypt.ConscryptMiddleware.java
com.koushikdutta.ion.cookie.CookieMiddleware.java
com.koushikdutta.ion.future.ImageViewFuture.java
com.koushikdutta.ion.future.ResponseFuture.java
com.koushikdutta.ion.gif.GifDecoder.java
com.koushikdutta.ion.gif.GifFrame.java
com.koushikdutta.ion.gson.GsonArrayParser.java
com.koushikdutta.ion.gson.GsonBody.java
com.koushikdutta.ion.gson.GsonObjectParser.java
com.koushikdutta.ion.gson.GsonParser.java
com.koushikdutta.ion.gson.GsonSerializer.java
com.koushikdutta.ion.gson.PojoBody.java
com.koushikdutta.ion.loader.AssetLoader.java
com.koushikdutta.ion.loader.AsyncHttpRequestFactory.java
com.koushikdutta.ion.loader.ContentLoader.java
com.koushikdutta.ion.loader.FileLoader.java
com.koushikdutta.ion.loader.HttpLoader.java
com.koushikdutta.ion.loader.InputStreamDataEmitterFuture.java
com.koushikdutta.ion.loader.MediaFile.java
com.koushikdutta.ion.loader.MtpConstants.java
com.koushikdutta.ion.loader.PackageIconLoader.java
com.koushikdutta.ion.loader.ResourceLoader.java
com.koushikdutta.ion.loader.SimpleLoader.java
com.koushikdutta.ion.loader.StreamLoader.java
com.koushikdutta.ion.loader.VideoLoader.java
com.koushikdutta.ion.sample.DeepZoomSample.java
com.koushikdutta.ion.sample.GallerySample.java
com.koushikdutta.ion.sample.GoogleImageSearch.java
com.koushikdutta.ion.sample.ImageViewSample.java
com.koushikdutta.ion.sample.LollipopTransitionFullscreen.java
com.koushikdutta.ion.sample.LollipopTransition.java
com.koushikdutta.ion.sample.ProgressBarDownload.java
com.koushikdutta.ion.sample.ProgressBarUpload.java
com.koushikdutta.ion.sample.SampleApplication.java
com.koushikdutta.ion.sample.Samples.java
com.koushikdutta.ion.sample.SquaredImageView.java
com.koushikdutta.ion.sample.TwitterGson.java
com.koushikdutta.ion.sample.Twitter.java