bmpScaler.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package epson.print.Util;
  2. import android.graphics.Bitmap;
  3. import android.graphics.BitmapFactory;
  4. import android.graphics.Matrix;
  5. import android.graphics.Rect;
  6. import java.io.FileInputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. public class bmpScaler {
  10. private Bitmap scaled;
  11. private static class Size {
  12. int sample;
  13. float scale;
  14. private Size() {
  15. }
  16. }
  17. public bmpScaler(String str, int i, boolean z) throws IOException {
  18. FileInputStream fileInputStream;
  19. FileInputStream fileInputStream2 = null;
  20. FileInputStream fileInputStream3 = new FileInputStream(str);
  21. Size roughSize = getRoughSize(fileInputStream3, i);
  22. fileInputStream = new FileInputStream(str);
  23. roughScaleImage(fileInputStream, roughSize);
  24. if (!z) {
  25. scaleImage(i);
  26. }
  27. fileInputStream.close();
  28. fileInputStream.close();
  29. }
  30. public Bitmap getScaled() {
  31. return scaled;
  32. }
  33. private void scaleImage(int i) {
  34. int width = scaled.getWidth();
  35. int height = scaled.getHeight();
  36. float f = (float) i;
  37. float f2 = f / ((float) width);
  38. float width2 = ((float) scaled.getWidth()) / f;
  39. float f3 = (float) height;
  40. Matrix matrix = new Matrix();
  41. matrix.postScale(f2, ((float) ((f3 / width2))) / f3);
  42. scaled = Bitmap.createBitmap(scaled, 0, 0, width, height, matrix, true);
  43. }
  44. private void roughScaleImage(InputStream inputStream, Size size) {
  45. new Matrix().postScale(size.scale, size.scale);
  46. BitmapFactory.Options options = new BitmapFactory.Options();
  47. while (true) {
  48. try {
  49. options.inSampleSize = size.sample;
  50. scaled = BitmapFactory.decodeStream(inputStream, (Rect) null, options);
  51. return;
  52. } catch (OutOfMemoryError unused) {
  53. size.sample *= 2;
  54. }
  55. }
  56. }
  57. private Size getRoughSize(InputStream inputStream, int i) {
  58. BitmapFactory.Options options = new BitmapFactory.Options();
  59. options.inJustDecodeBounds = true;
  60. BitmapFactory.decodeStream(inputStream, (Rect) null, options);
  61. return getRoughSize(options.outWidth, options.outHeight, i);
  62. }
  63. private Size getRoughSize(int i, int i2, int i3) {
  64. Size size = new Size();
  65. size.scale = (float) (i / i3);
  66. size.sample = 1;
  67. int i4 = (((float) i2) / size.scale);
  68. while (true) {
  69. i /= 2;
  70. if (i < i3 || (i2 = i2 / 2) < i4) {
  71. return size;
  72. }
  73. size.sample *= 2;
  74. }
  75. }
  76. }