mirror of
https://github.com/oxen-io/session-android.git
synced 2025-03-15 12:30:53 +00:00
parent
5116c61f43
commit
f72cd5b0ff
@ -133,17 +133,11 @@ public class BitmapUtil {
|
|||||||
final int imageWidth = options.outWidth;
|
final int imageWidth = options.outWidth;
|
||||||
final int imageHeight = options.outHeight;
|
final int imageHeight = options.outHeight;
|
||||||
|
|
||||||
int scaler = 1;
|
options.inSampleSize = getScaleFactor(imageWidth, imageHeight, maxWidth, maxHeight, constrainedMemory);
|
||||||
int scaleFactor = (constrainedMemory ? 1 : 2);
|
|
||||||
while ((imageWidth / scaler / scaleFactor >= maxWidth) && (imageHeight / scaler / scaleFactor >= maxHeight)) {
|
|
||||||
scaler *= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
options.inSampleSize = scaler;
|
|
||||||
options.inJustDecodeBounds = false;
|
options.inJustDecodeBounds = false;
|
||||||
|
|
||||||
BufferedInputStream is = new BufferedInputStream(data);
|
InputStream is = new BufferedInputStream(data);
|
||||||
Bitmap roughThumbnail = BitmapFactory.decodeStream(is, null, options);
|
Bitmap roughThumbnail = BitmapFactory.decodeStream(is, null, options);
|
||||||
try {
|
try {
|
||||||
is.close();
|
is.close();
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
@ -189,6 +183,20 @@ public class BitmapUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting static int getScaleFactor(int inWidth, int inHeight,
|
||||||
|
int maxWidth, int maxHeight,
|
||||||
|
boolean constrained)
|
||||||
|
{
|
||||||
|
int scaler = 1;
|
||||||
|
while (!constrained && ((inWidth / scaler / 2 >= maxWidth) && (inHeight / scaler / 2 >= maxHeight))) {
|
||||||
|
scaler *= 2;
|
||||||
|
}
|
||||||
|
while (constrained && ((inWidth / scaler > maxWidth) || (inHeight / scaler > maxHeight))) {
|
||||||
|
scaler *= 2;
|
||||||
|
}
|
||||||
|
return scaler;
|
||||||
|
}
|
||||||
|
|
||||||
private static Bitmap fixOrientation(Bitmap bitmap, InputStream orientationStream) {
|
private static Bitmap fixOrientation(Bitmap bitmap, InputStream orientationStream) {
|
||||||
final int orientation = Exif.getOrientation(orientationStream);
|
final int orientation = Exif.getOrientation(orientationStream);
|
||||||
|
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package org.thoughtcrime.securesms.util;
|
||||||
|
|
||||||
|
import org.thoughtcrime.securesms.TextSecureTestCase;
|
||||||
|
|
||||||
|
public class BitmapUtilTest extends TextSecureTestCase {
|
||||||
|
public void testScaleFactorNormal() {
|
||||||
|
assertEquals(1, BitmapUtil.getScaleFactor(1000, 1000, 9000, 9000, false));
|
||||||
|
|
||||||
|
assertEquals(1, BitmapUtil.getScaleFactor(1000, 1000, 750, 750, false));
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 500, 500, false));
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 499, 499, false));
|
||||||
|
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 250, 250, false));
|
||||||
|
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 249, 249, false));
|
||||||
|
|
||||||
|
assertEquals(1, BitmapUtil.getScaleFactor(1000, 500, 750, 750, false));
|
||||||
|
assertEquals(1, BitmapUtil.getScaleFactor(2000, 1000, 501, 501, false));
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(2000, 1000, 500, 500, false));
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(1000, 2000, 499, 499, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testScaleFactorConstrained() {
|
||||||
|
assertEquals(1, BitmapUtil.getScaleFactor(1000, 1000, 9000, 9000, true));
|
||||||
|
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 750, 750, true));
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 500, 500, true));
|
||||||
|
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 499, 499, true));
|
||||||
|
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 250, 250, true));
|
||||||
|
assertEquals(8, BitmapUtil.getScaleFactor(1000, 1000, 249, 249, true));
|
||||||
|
|
||||||
|
assertEquals(2, BitmapUtil.getScaleFactor(1000, 500, 750, 750, true));
|
||||||
|
assertEquals(4, BitmapUtil.getScaleFactor(2000, 1000, 500, 500, true));
|
||||||
|
assertEquals(8, BitmapUtil.getScaleFactor(1000, 2000, 499, 499, true));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user