1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
package com.bumptech.glide;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.ParcelFileDescriptor;
import com.bumptech.glide.load.model.ImageVideoModelLoader;
import com.bumptech.glide.load.model.ImageVideoWrapper;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.resource.transcode.BitmapBytesTranscoder;
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
import com.bumptech.glide.manager.RequestTracker;
import com.bumptech.glide.provider.DataLoadProvider;
import com.bumptech.glide.provider.FixedLoadProvider;
import java.io.InputStream;
/**
* A class for creating a load request that either loads an {@link Bitmap} directly or that adds an
* {@link com.bumptech.glide.load.resource.transcode.ResourceTranscoder} to transcode the {@link Bitmap} into another
* resource type.
*
* @param <ModelType> The type of model to load the {@link Bitmap} or transcoded class from.
*/
public class BitmapTypeRequest<ModelType> extends BitmapRequestBuilder<ModelType, Bitmap> {
private final Context context;
private final ModelType model;
private final ModelLoader<ModelType, InputStream> streamModelLoader;
private ModelLoader<ModelType, ParcelFileDescriptor> fileDescriptorModelLoader;
private final Glide glide;
private RequestTracker requestTracker;
private RequestManager.OptionsApplier optionsApplier;
private static <A, R> FixedLoadProvider<A, ImageVideoWrapper, Bitmap, R> buildProvider(Glide glide,
ModelLoader<A, InputStream> streamModelLoader,
ModelLoader<A, ParcelFileDescriptor> fileDescriptorModelLoader,
Class<R> transcodedClass, ResourceTranscoder<Bitmap, R> transcoder) {
if (streamModelLoader == null && fileDescriptorModelLoader == null) {
return null;
}
if (transcoder == null) {
transcoder = glide.buildTranscoder(Bitmap.class, transcodedClass);
}
DataLoadProvider<ImageVideoWrapper, Bitmap> loadProvider = glide.buildDataProvider(ImageVideoWrapper.class,
Bitmap.class);
ImageVideoModelLoader<A> modelLoader = new ImageVideoModelLoader<A>(streamModelLoader,
fileDescriptorModelLoader);
return new FixedLoadProvider<A, ImageVideoWrapper, Bitmap, R>(modelLoader, transcoder, loadProvider);
}
BitmapTypeRequest(Context context, ModelType model,
ModelLoader<ModelType, InputStream> streamModelLoader,
ModelLoader<ModelType, ParcelFileDescriptor> fileDescriptorModelLoader,
Glide glide, RequestTracker requestTracker, RequestManager.OptionsApplier optionsApplier) {
super(context, model,
buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, Bitmap.class, null),
Bitmap.class,
glide, requestTracker);
this.context = context;
this.model = model;
this.streamModelLoader = streamModelLoader;
this.fileDescriptorModelLoader = fileDescriptorModelLoader;
this.glide = glide;
this.requestTracker = requestTracker;
this.optionsApplier = optionsApplier;
}
/**
* Sets a transcoder to transcode the decoded and transformed {@link Bitmap} into another resource type.
*
* @param transcoder The transoder to use.
* @param transcodeClass The {@link Class} of the resource the {@link Bitmap} will be transcoded to.
* @param <R> The type of the resource the {@link Bitmap} will be transcoded to.
* @return This request builder.
*/
public <R> BitmapRequestBuilder<ModelType, R> transcode(ResourceTranscoder<Bitmap, R> transcoder,
Class<R> transcodeClass) {
return optionsApplier.apply(model, new BitmapRequestBuilder<ModelType, R>(context, model,
buildProvider(glide, streamModelLoader, fileDescriptorModelLoader, transcodeClass, transcoder),
transcodeClass, glide, requestTracker));
}
/**
* Transcodes the decoded and transformed {@link Bitmap} to bytes by compressing it as a JPEG to a byte array.
* array.
*
* @see #toBytes(android.graphics.Bitmap.CompressFormat, int)
*
* @return This request builder.
*/
public BitmapRequestBuilder<ModelType, byte[]> toBytes() {
return transcode(new BitmapBytesTranscoder(), byte[].class);
}
/**
* Transcodes the decoded and transformed {@link android.graphics.Bitmap} to bytes by compressing it using the
* given format and quality to a byte array.
*
* @see android.graphics.Bitmap#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream)
* @see #toBytes()
*
* @param compressFormat The {@link android.graphics.Bitmap.CompressFormat} to use to compress the {@link Bitmap}.
* @param quality The quality level from 0-100 to use to compress the {@link Bitmap}.
* @return This request builder.
*/
public BitmapRequestBuilder<ModelType, byte[]> toBytes(Bitmap.CompressFormat compressFormat, int quality) {
return transcode(new BitmapBytesTranscoder(compressFormat, quality), byte[].class);
}
}
|