Moved Bitmap decoding methods into separate class
This commit is contained in:
parent
fde6a05f18
commit
fadb0de18c
@ -11,6 +11,7 @@ import android.widget.ImageView;
|
||||
import de.danoeh.antennapod.AppConfig;
|
||||
import de.danoeh.antennapod.PodcastApp;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.util.BitmapDecoder;
|
||||
|
||||
public abstract class BitmapDecodeWorkerTask extends
|
||||
AsyncTask<Void, Void, Void> {
|
||||
@ -88,25 +89,8 @@ public abstract class BitmapDecodeWorkerTask extends
|
||||
f = new File(fileUrl);
|
||||
}
|
||||
if (fileUrl != null && f.exists()) {
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
options.inJustDecodeBounds = true;
|
||||
BitmapFactory.decodeFile(fileUrl, options);
|
||||
int sampleSize = calculateSampleSize(options.outWidth,
|
||||
options.outHeight);
|
||||
|
||||
options.inJustDecodeBounds = false;
|
||||
options.inSampleSize = sampleSize;
|
||||
decodedBitmap = BitmapFactory.decodeFile(fileUrl,
|
||||
options);
|
||||
if (decodedBitmap == null) {
|
||||
Log.i(TAG,
|
||||
"Bitmap could not be decoded in custom sample size. Trying default sample size (path was "
|
||||
+ fileUrl + ")");
|
||||
decodedBitmap = BitmapFactory.decodeFile(fileUrl);
|
||||
}
|
||||
if (decodedBitmap != null) {
|
||||
bitmap = Bitmap.createScaledBitmap(decodedBitmap,
|
||||
PREFERRED_LENGTH, PREFERRED_LENGTH, false);
|
||||
bitmap = BitmapDecoder.decodeBitmap(PREFERRED_LENGTH, fileUrl);
|
||||
if (bitmap != null) {
|
||||
storeBitmapInCache(bitmap);
|
||||
} else {
|
||||
Log.w(TAG, "Could not load bitmap. Using default image.");
|
||||
|
55
src/de/danoeh/antennapod/util/BitmapDecoder.java
Normal file
55
src/de/danoeh/antennapod/util/BitmapDecoder.java
Normal file
@ -0,0 +1,55 @@
|
||||
package de.danoeh.antennapod.util;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.util.Log;
|
||||
|
||||
public class BitmapDecoder {
|
||||
private static final String TAG = "BitmapDecoder";
|
||||
|
||||
private static int calculateSampleSize(int preferredLength, int width, int height) {
|
||||
int max = Math.max(width, height);
|
||||
if (max < preferredLength) {
|
||||
return 1;
|
||||
} else {
|
||||
// find first sample size where max / sampleSize <
|
||||
// PREFERRED_LENGTH
|
||||
for (int sampleSize = 1, power = 0;; power++, sampleSize = (int) Math
|
||||
.pow(2, power)) {
|
||||
int newLength = max / sampleSize;
|
||||
if (newLength <= preferredLength) {
|
||||
if (newLength > 0) {
|
||||
return sampleSize;
|
||||
} else {
|
||||
return sampleSize - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Bitmap decodeBitmap(int preferredLength, String fileUrl) {
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
options.inJustDecodeBounds = true;
|
||||
BitmapFactory.decodeFile(fileUrl, options);
|
||||
int sampleSize = calculateSampleSize(preferredLength, options.outWidth,
|
||||
options.outHeight);
|
||||
|
||||
options.inJustDecodeBounds = false;
|
||||
options.inSampleSize = sampleSize;
|
||||
Bitmap decodedBitmap = BitmapFactory.decodeFile(fileUrl,
|
||||
options);
|
||||
if (decodedBitmap == null) {
|
||||
Log.i(TAG,
|
||||
"Bitmap could not be decoded in custom sample size. Trying default sample size (path was "
|
||||
+ fileUrl + ")");
|
||||
decodedBitmap = BitmapFactory.decodeFile(fileUrl);
|
||||
}
|
||||
if (decodedBitmap != null) {
|
||||
return Bitmap.createScaledBitmap(decodedBitmap,
|
||||
preferredLength, preferredLength, false);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user