11614d6b4169b2930d3d2c17210c438708bb1117dSam Juddpackage com.bumptech.glide.load.resource.bitmap; 21614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 31614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport android.content.Context; 41614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport android.graphics.Bitmap; 5f7a6d65cf7c1a41908dd48e0dab68ee5b881387eSam Judd 61614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport com.bumptech.glide.Glide; 71614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport com.bumptech.glide.load.Transformation; 81614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport com.bumptech.glide.load.engine.Resource; 91614d6b4169b2930d3d2c17210c438708bb1117dSam Juddimport com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; 101614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 111614d6b4169b2930d3d2c17210c438708bb1117dSam Judd/** 121614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * A simple {@link com.bumptech.glide.load.Transformation} for transforming {@link android.graphics.Bitmap}s that 131614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * abstracts away dealing with {@link com.bumptech.glide.load.engine.Resource} objects for subclasses. 141614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * 151614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * Use cases will look something like this: 161614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * <pre> 171614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * <code> 181614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * public class FillSpace extends BaseBitmapTransformation { 191614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * {@literal @Override} 201614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * public Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { 21d88c2f7df8007f44fb2b6ec3c00eac280fb298ecSam Judd * if (toTransform.getWidth() == outWidth && toTransform.getHeight() == outHeight) { 221614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * return toTransform; 231614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * } 241614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * 251614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * return Bitmap.createScaledBitmap(toTransform, outWidth, outHeight, true); 261614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * } 271614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * } 281614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * </code> 291614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * </pre> 301614d6b4169b2930d3d2c17210c438708bb1117dSam Judd */ 311614d6b4169b2930d3d2c17210c438708bb1117dSam Juddpublic abstract class BitmapTransformation implements Transformation<Bitmap> { 321614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 331614d6b4169b2930d3d2c17210c438708bb1117dSam Judd private BitmapPool bitmapPool; 341614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 351614d6b4169b2930d3d2c17210c438708bb1117dSam Judd public BitmapTransformation(Context context) { 361614d6b4169b2930d3d2c17210c438708bb1117dSam Judd this(Glide.get(context).getBitmapPool()); 371614d6b4169b2930d3d2c17210c438708bb1117dSam Judd } 381614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 391614d6b4169b2930d3d2c17210c438708bb1117dSam Judd public BitmapTransformation(BitmapPool bitmapPool) { 401614d6b4169b2930d3d2c17210c438708bb1117dSam Judd this.bitmapPool = bitmapPool; 411614d6b4169b2930d3d2c17210c438708bb1117dSam Judd } 421614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 431614d6b4169b2930d3d2c17210c438708bb1117dSam Judd @Override 441614d6b4169b2930d3d2c17210c438708bb1117dSam Judd public final Resource<Bitmap> transform(Resource<Bitmap> resource, int outWidth, int outHeight) { 451614d6b4169b2930d3d2c17210c438708bb1117dSam Judd if (outWidth <= 0 || outHeight <= 0) { 465ba19a0e69ad3a651b8f13ba45de48a56b56ce36Sam Judd throw new IllegalArgumentException("Cannot apply transformation on width: " + outWidth + " or height: " 471614d6b4169b2930d3d2c17210c438708bb1117dSam Judd + outHeight + " less than or equal to zero"); 481614d6b4169b2930d3d2c17210c438708bb1117dSam Judd } 491614d6b4169b2930d3d2c17210c438708bb1117dSam Judd Bitmap toTransform = resource.get(); 501614d6b4169b2930d3d2c17210c438708bb1117dSam Judd Bitmap transformed = transform(bitmapPool, toTransform, outWidth, outHeight); 511614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 521614d6b4169b2930d3d2c17210c438708bb1117dSam Judd final Resource<Bitmap> result; 535ba19a0e69ad3a651b8f13ba45de48a56b56ce36Sam Judd if (toTransform.equals(transformed)) { 541614d6b4169b2930d3d2c17210c438708bb1117dSam Judd result = resource; 551614d6b4169b2930d3d2c17210c438708bb1117dSam Judd } else { 564ee3030c0b69cbc1a0c0a073d33cc5a3023ed493Sam Judd result = BitmapResource.obtain(transformed, bitmapPool); 571614d6b4169b2930d3d2c17210c438708bb1117dSam Judd } 581614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 591614d6b4169b2930d3d2c17210c438708bb1117dSam Judd return result; 601614d6b4169b2930d3d2c17210c438708bb1117dSam Judd } 611614d6b4169b2930d3d2c17210c438708bb1117dSam Judd 621614d6b4169b2930d3d2c17210c438708bb1117dSam Judd /** 631614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * Transforms the given {@link android.graphics.Bitmap} based on the given dimensions and returns the transformed 641614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * result. 651614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * 661614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * @param pool A {@link com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool} that can be used to obtain and 671614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * return intermediate {@link Bitmap}s used in this transformation. For every 681614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * {@link android.graphics.Bitmap} obtained from the pool during this transformation, a 691614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * {@link android.graphics.Bitmap} must also be returned. 701614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * @param toTransform The {@link android.graphics.Bitmap} to transform. 711614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * @param outWidth The ideal width of the transformed bitmap (does not need to match exactly). 721614d6b4169b2930d3d2c17210c438708bb1117dSam Judd * @param outHeight The ideal height of the transformed bitmap (does not need to match exactly). 731614d6b4169b2930d3d2c17210c438708bb1117dSam Judd */ 741614d6b4169b2930d3d2c17210c438708bb1117dSam Judd protected abstract Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight); 751614d6b4169b2930d3d2c17210c438708bb1117dSam Judd} 76