Photo.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. package epson.print.Util;
  2. import android.content.Context;
  3. import android.database.Cursor;
  4. import android.database.CursorIndexOutOfBoundsException;
  5. import android.database.StaleDataException;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.graphics.Canvas;
  9. import android.graphics.Color;
  10. import android.graphics.ColorMatrix;
  11. import android.graphics.ColorMatrixColorFilter;
  12. import android.graphics.Paint;
  13. import android.graphics.Rect;
  14. import android.media.ExifInterface;
  15. import android.provider.MediaStore;
  16. import java.io.File;
  17. import java.io.IOException;
  18. import java.io.InputStream;
  19. import java.io.Serializable;
  20. import java.text.ParseException;
  21. import java.text.SimpleDateFormat;
  22. import java.util.ArrayList;
  23. import java.util.Arrays;
  24. import java.util.Comparator;
  25. import java.util.Date;
  26. import epson.common.Utils;
  27. import epson.image.epsonImage;
  28. import epson.print.CommonDefine;
  29. import epson.print.EPImageUtil;
  30. public class Photo implements Serializable, CommonDefine {
  31. private static final int DATE_FORMAT_DD_MM_YYYY = 2;
  32. private static final int DATE_FORMAT_MM_DD_YYYY = 1;
  33. private static final int DATE_FORMAT_OFF = 0;
  34. private static final int DATE_FORMAT_YYYY_MM_DD = 3;
  35. private static final int UNCONSTRAINED = -1;
  36. private Bitmap Micro_thumbnail;
  37. private Bitmap Mimi_thumbnail;
  38. private boolean checked;
  39. private String name;
  40. private String path;
  41. public String getPath() {
  42. return path;
  43. }
  44. public void setPath(String str) {
  45. path = str;
  46. }
  47. public String getName() {
  48. return name;
  49. }
  50. public void setName(String str) {
  51. name = str;
  52. }
  53. public Bitmap getMimi_thumbnail() {
  54. return mimi_thumbnail;
  55. }
  56. public void setMimi_thumbnail(Bitmap bitmap) {
  57. mimi_thumbnail = bitmap;
  58. }
  59. public Bitmap getMicro_thumbnail() {
  60. return micro_thumbnail;
  61. }
  62. public void setMicro_thumbnail(Bitmap bitmap) {
  63. micro_thumbnail = bitmap;
  64. }
  65. public boolean isChecked() {
  66. return checked;
  67. }
  68. public void setChecked(boolean z) {
  69. checked = z;
  70. }
  71. public static boolean IsFilePhoto(String str) {
  72. if (str == null || !Utils.isPhotoFile(str)) {
  73. return false;
  74. }
  75. if (!Utils.checkMimeType(str, CommonDefine.IMAGE_TYPE_BMP) || new EPImageUtil().getBitCount(str) == 24) {
  76. return true;
  77. }
  78. return false;
  79. }
  80. public static ArrayList<Long> getIdImage(String str, Context context, int i) throws NullPointerException, CursorIndexOutOfBoundsException, StaleDataException {
  81. ArrayList<Long> arrayList = new ArrayList<>();
  82. File file = new File(str);
  83. if (file.isDirectory()) {
  84. File[] listFiles = file.listFiles();
  85. Arrays.sort(listFiles, new ModifiedTimeComparator());
  86. for (File file2 : listFiles) {
  87. if (!file2.isDirectory() && IsFilePhoto(file2.getPath())) {
  88. arrayList.add(Long.valueOf(loadIdOriginal(file2.getAbsolutePath(), context)));
  89. if (arrayList.size() >= i) {
  90. break;
  91. }
  92. }
  93. }
  94. }
  95. return arrayList;
  96. }
  97. static class ModifiedTimeComparator implements Comparator<File> {
  98. ModifiedTimeComparator() {
  99. }
  100. public int compare(File file, File file2) {
  101. int i = ((file2.lastModified() - file.lastModified()) > 0 ? 1 : ((file2.lastModified() - file.lastModified()) == 0 ? 0 : -1));
  102. if (i == 0) {
  103. return 0;
  104. }
  105. return i > 0 ? 1 : -1;
  106. }
  107. }
  108. public static long loadIdOriginal(String str, Context context) throws NullPointerException, CursorIndexOutOfBoundsException, StaleDataException {
  109. long j;
  110. Cursor query = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, (String[]) null, (String) null, (String[]) null, (String) null);
  111. query.moveToFirst();
  112. while (true) {
  113. if (!query.getString(query.getColumnIndexOrThrow("_data")).equalsIgnoreCase(str)) {
  114. if (!query.moveToNext()) {
  115. j = 0;
  116. break;
  117. }
  118. } else {
  119. j = query.getLong(query.getColumnIndexOrThrow("_id"));
  120. break;
  121. }
  122. }
  123. query.close();
  124. return j;
  125. }
  126. public static ArrayList<String> getStringImage(String str, int i) throws NullPointerException, CursorIndexOutOfBoundsException, StaleDataException {
  127. ArrayList<String> arrayList = new ArrayList<>();
  128. File file = new File(str);
  129. if (file.isDirectory()) {
  130. File[] listFiles = file.listFiles();
  131. Arrays.sort(listFiles, new ModifiedTimeComparator());
  132. for (File file2 : listFiles) {
  133. if (!file2.isDirectory() && IsFilePhoto(file2.getPath())) {
  134. arrayList.add(file2.getAbsolutePath());
  135. if (arrayList.size() >= i) {
  136. break;
  137. }
  138. }
  139. }
  140. }
  141. return arrayList;
  142. }
  143. public static String getDateTimeSystem(String str, int i) {
  144. String str2;
  145. Date date;
  146. epsonImage epsonimage = new epsonImage();
  147. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd");
  148. try {
  149. str2 = new ExifInterface(str).getAttribute(android.media.ExifInterface.TAG_DATETIME);
  150. if (str2 == null) {
  151. str2 = epsonimage.epsmpGetDate(str);
  152. EPLog.e("PHOTO", "Get day from C not from EXIF");
  153. }
  154. } catch (IOException e) {
  155. e.printStackTrace();
  156. EPLog.e("PHOTO", "Get day from C not from EXIF");
  157. str2 = epsonimage.epsmpGetDate(str);
  158. }
  159. try {
  160. date = simpleDateFormat.parse(str2);
  161. } catch (ParseException e2) {
  162. e2.printStackTrace();
  163. EPLog.e("PHOTO", "Get last modified day");
  164. date = new Date(new File(str).lastModified());
  165. }
  166. String[] split = simpleDateFormat.format(date).split(":");
  167. switch (i) {
  168. case 1:
  169. return split[1] + CommonDefine.SLASH + split[2] + CommonDefine.SLASH + split[0];
  170. case 2:
  171. return split[2] + CommonDefine.SLASH + split[1] + CommonDefine.SLASH + split[0];
  172. case 3:
  173. return split[0] + CommonDefine.SLASH + split[1] + CommonDefine.SLASH + split[2];
  174. default:
  175. return "";
  176. }
  177. }
  178. public static Bitmap createBitmapWithUri(String str, int i, int i2, boolean z) throws IOException {
  179. if (!z) {
  180. return getBitmapView(str, i, i2);
  181. }
  182. return createBitmapGrayscale(str, i, i2);
  183. }
  184. public static Bitmap ConvertToGrayscale(Bitmap bitmap) {
  185. int rgb = Color.rgb(54, 182, 18);
  186. for (int i = 0; i < bitmap.getHeight(); i++) {
  187. for (int i2 = 0; i2 < bitmap.getWidth(); i2++) {
  188. bitmap.setPixel(i2, i, rgb);
  189. }
  190. }
  191. return bitmap;
  192. }
  193. public static Bitmap createBitmapGrayscale(String str, int i, int i2) throws IOException {
  194. Bitmap bitmap;
  195. ColorMatrix colorMatrix = new ColorMatrix();
  196. colorMatrix.setSaturation(0.0f);
  197. ColorMatrixColorFilter colorMatrixColorFilter = new ColorMatrixColorFilter(colorMatrix);
  198. Paint paint = new Paint();
  199. paint.setColorFilter(colorMatrixColorFilter);
  200. int i3 = i2;
  201. int i4 = i;
  202. Bitmap bitmap2 = null;
  203. while (true) {
  204. if (bitmap2 != null) {
  205. break;
  206. }
  207. try {
  208. bitmap2 = getBitmapView(str, i4, i3);
  209. if (bitmap2 != null) {
  210. int width = bitmap2.getWidth();
  211. int height = bitmap2.getHeight();
  212. }
  213. } catch (OutOfMemoryError unused) {
  214. i4 /= 2;
  215. i3 /= 2;
  216. if (bitmap2 != null) {
  217. bitmap2.recycle();
  218. bitmap2 = null;
  219. }
  220. }
  221. }
  222. if (bitmap2 != null) {
  223. bitmap = Bitmap.createBitmap(bitmap2.getWidth(), bitmap2.getHeight(), Bitmap.Config.ARGB_8888);
  224. } else {
  225. bitmap = null;
  226. }
  227. if (bitmap == null) {
  228. return null;
  229. }
  230. new Canvas(bitmap).drawBitmap(bitmap2, 0.0f, 0.0f, paint);
  231. if (bitmap2 != null) {
  232. bitmap2.recycle();
  233. }
  234. return bitmap;
  235. }
  236. public static Bitmap getBitmapView(String r4, int r5, int r6) throws java.io.FileNotFoundException {
  237. throw new UnsupportedOperationException("Method not decompiled: epson.print.Util.Photo.getBitmapView(java.lang.String, int, int):android.graphics.Bitmap");
  238. }
  239. public static int computeSampleSize(InputStream inputStream, int i, int i2) {
  240. BitmapFactory.Options options = new BitmapFactory.Options();
  241. options.inJustDecodeBounds = true;
  242. BitmapFactory.decodeStream(inputStream, (Rect) null, options);
  243. return computeSampleSize(options, Math.min(i, i2) / 2, i * i2);
  244. }
  245. public static int computeSampleSize(BitmapFactory.Options options, int i, int i2) {
  246. int computeInitialSampleSize = computeInitialSampleSize(options, i, i2);
  247. if (computeInitialSampleSize > 8) {
  248. return ((computeInitialSampleSize + 7) / 8) * 8;
  249. }
  250. int i3 = 1;
  251. while (i3 < computeInitialSampleSize) {
  252. i3 <<= 1;
  253. }
  254. return i3;
  255. }
  256. public static int computeInitialSampleSize(BitmapFactory.Options options, int i, int i2) {
  257. int i3;
  258. int i4;
  259. double d = options.outWidth;
  260. double d2 = options.outHeight;
  261. if (i2 == -1) {
  262. i3 = 1;
  263. } else {
  264. i3 = Math.ceil(Math.sqrt((d * d2) / (i2)));
  265. }
  266. if (i == -1) {
  267. i4 = 128;
  268. } else {
  269. double d3 = i;
  270. i4 = Math.min(Math.floor(d / d3), Math.floor(d2 / d3));
  271. }
  272. if (i4 < i3) {
  273. return i3;
  274. }
  275. if (i2 == -1 && i == -1) {
  276. return 1;
  277. }
  278. return i == -1 ? i3 : i4;
  279. }
  280. }