Skip to content

Commit 860f7d0

Browse files
committed
Use the new BufferedOutputStream when encoding Bitmaps.
Deprecates the BitmapEncoder constructor that does not take an ArrayPool.
1 parent a0f3d30 commit 860f7d0

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

library/src/main/java/com/bumptech/glide/Glide.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ private static void throwIncorrectGlideModule(Exception e) {
351351
new ResourceLoader.FileDescriptorFactory(resources);
352352
ResourceLoader.AssetFileDescriptorFactory resourceLoaderAssetFileDescriptorFactory =
353353
new ResourceLoader.AssetFileDescriptorFactory(resources);
354-
BitmapEncoder bitmapEncoder = new BitmapEncoder();
354+
BitmapEncoder bitmapEncoder = new BitmapEncoder(arrayPool);
355355

356356
BitmapBytesTranscoder bitmapBytesTranscoder = new BitmapBytesTranscoder();
357357
GifDrawableBytesTranscoder gifDrawableBytesTranscoder = new GifDrawableBytesTranscoder();

library/src/main/java/com/bumptech/glide/load/resource/bitmap/BitmapEncoder.java

+20
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import android.graphics.Bitmap;
44
import android.support.annotation.NonNull;
5+
import android.support.annotation.Nullable;
56
import android.support.v4.os.TraceCompat;
67
import android.util.Log;
78
import com.bumptech.glide.load.EncodeStrategy;
89
import com.bumptech.glide.load.Option;
910
import com.bumptech.glide.load.Options;
1011
import com.bumptech.glide.load.ResourceEncoder;
12+
import com.bumptech.glide.load.data.BufferedOutputStream;
1113
import com.bumptech.glide.load.engine.Resource;
14+
import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool;
1215
import com.bumptech.glide.util.LogTime;
1316
import com.bumptech.glide.util.Util;
1417
import java.io.File;
@@ -49,6 +52,20 @@ public class BitmapEncoder implements ResourceEncoder<Bitmap> {
4952
"com.bumptech.glide.load.resource.bitmap.BitmapEncoder.CompressionFormat");
5053

5154
private static final String TAG = "BitmapEncoder";
55+
@Nullable
56+
private final ArrayPool arrayPool;
57+
58+
public BitmapEncoder(@NonNull ArrayPool arrayPool) {
59+
this.arrayPool = arrayPool;
60+
}
61+
62+
/**
63+
* @deprecated Use {@link #BitmapEncoder(ArrayPool)} instead.
64+
*/
65+
@Deprecated
66+
public BitmapEncoder() {
67+
arrayPool = null;
68+
}
5269

5370
@Override
5471
public boolean encode(@NonNull Resource<Bitmap> resource, @NonNull File file,
@@ -65,6 +82,9 @@ public boolean encode(@NonNull Resource<Bitmap> resource, @NonNull File file,
6582
OutputStream os = null;
6683
try {
6784
os = new FileOutputStream(file);
85+
if (arrayPool != null) {
86+
os = new BufferedOutputStream(os, arrayPool);
87+
}
6888
bitmap.compress(format, quality, os);
6989
os.close();
7090
success = true;

library/test/src/test/java/com/bumptech/glide/load/resource/bitmap/BitmapEncoderTest.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import com.bumptech.glide.load.EncodeStrategy;
1111
import com.bumptech.glide.load.Options;
1212
import com.bumptech.glide.load.engine.Resource;
13+
import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool;
14+
import com.bumptech.glide.load.engine.bitmap_recycle.LruArrayPool;
1315
import com.bumptech.glide.util.ByteBufferUtil;
1416
import java.io.File;
1517
import java.io.IOException;
@@ -86,13 +88,13 @@ public void testEncoderEncodesPngWithNullFormatAndBitmapWithAlpha() throws IOExc
8688

8789
@Test
8890
public void testReturnsTrueFromWrite() {
89-
BitmapEncoder encoder = new BitmapEncoder();
91+
BitmapEncoder encoder = new BitmapEncoder(harness.arrayPool);
9092
assertTrue(encoder.encode(harness.resource, harness.file, harness.options));
9193
}
9294

9395
@Test
9496
public void testEncodeStrategy_alwaysReturnsTransformed() {
95-
BitmapEncoder encoder = new BitmapEncoder();
97+
BitmapEncoder encoder = new BitmapEncoder(harness.arrayPool);
9698
assertEquals(EncodeStrategy.TRANSFORMED, encoder.getEncodeStrategy(harness.options));
9799
}
98100

@@ -105,6 +107,7 @@ private static class EncoderHarness {
105107
final Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
106108
final Options options = new Options();
107109
final File file = new File(RuntimeEnvironment.application.getCacheDir(), "test");
110+
final ArrayPool arrayPool = new LruArrayPool();
108111

109112
EncoderHarness() {
110113
when(resource.get()).thenReturn(bitmap);
@@ -119,7 +122,7 @@ void setFormat(Bitmap.CompressFormat format) {
119122
}
120123

121124
String encode() throws IOException {
122-
BitmapEncoder encoder = new BitmapEncoder();
125+
BitmapEncoder encoder = new BitmapEncoder(arrayPool);
123126
encoder.encode(resource, file, options);
124127
byte[] data = ByteBufferUtil.toBytes(ByteBufferUtil.fromFile(file));
125128
return new String(data, "UTF-8");

0 commit comments

Comments
 (0)