1package com.bumptech.glide; 2 3import android.content.Context; 4import android.graphics.Bitmap; 5import android.os.ParcelFileDescriptor; 6import com.bumptech.glide.load.model.ImageVideoModelLoader; 7import com.bumptech.glide.load.model.ImageVideoWrapper; 8import com.bumptech.glide.load.model.ModelLoader; 9import com.bumptech.glide.load.resource.transcode.BitmapBytesTranscoder; 10import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; 11import com.bumptech.glide.manager.RequestTracker; 12import com.bumptech.glide.provider.FixedLoadProvider; 13 14import java.io.InputStream; 15 16public class BitmapTypeRequest<A> extends BitmapRequestBuilder<A, Bitmap> { 17 private final Context context; 18 private final A model; 19 private final ModelLoader<A, InputStream> streamModelLoader; 20 private ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader; 21 private final Glide glide; 22 private RequestTracker requestTracker; 23 private RequestManager.OptionsApplier optionsApplier; 24 25 private static <A, R> FixedLoadProvider<A, ImageVideoWrapper, Bitmap, R> buildProvider(Glide glide, 26 ModelLoader<A, InputStream> streamModelLoader, 27 ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader, 28 Class<R> transcodedClass, 29 ResourceTranscoder<Bitmap, R> transcoder) { 30 return streamModelLoader == null && fileDescriptorModelLoader == null ? null : 31 new FixedLoadProvider<A, ImageVideoWrapper, Bitmap, R>( 32 new ImageVideoModelLoader<A>(streamModelLoader, fileDescriptorModelLoader), 33 transcoder != null ? transcoder : glide.buildTranscoder(Bitmap.class, transcodedClass), 34 glide.buildDataProvider(ImageVideoWrapper.class, Bitmap.class)); 35 } 36 37 BitmapTypeRequest(Context context, A model, 38 ModelLoader<A, InputStream> streamModelLoader, 39 ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader, 40 Glide glide, RequestTracker requestTracker, RequestManager.OptionsApplier optionsApplier) { 41 super(context, model, 42 buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, Bitmap.class, null), 43 Bitmap.class, 44 glide, requestTracker); 45 this.context = context; 46 this.model = model; 47 this.streamModelLoader = streamModelLoader; 48 this.fileDescriptorModelLoader = fileDescriptorModelLoader; 49 this.glide = glide; 50 this.requestTracker= requestTracker; 51 this.optionsApplier = optionsApplier; 52 } 53 54 public <R> BitmapRequestBuilder<A, R> transcode(ResourceTranscoder<Bitmap, R> transcoder, Class<R> transcodeClass) { 55 return optionsApplier.apply(model, new BitmapRequestBuilder<A, R>(context, model, 56 buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, transcodeClass, transcoder), 57 transcodeClass, glide, requestTracker)); 58 } 59 60 public BitmapRequestBuilder<A, byte[]> toBytes() { 61 return transcode(new BitmapBytesTranscoder(), byte[].class); 62 } 63 64 public BitmapRequestBuilder<A, byte[]> toBytes(Bitmap.CompressFormat compressFormat, int quality) { 65 return transcode(new BitmapBytesTranscoder(compressFormat, quality), byte[].class); 66 } 67} 68