ApfPreviewView.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package com.epson.iprint.apf;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.os.Handler;
  7. import java.io.File;
  8. import epson.print.EPImage;
  9. import epson.print.EPImageCreator;
  10. import epson.print.EPImageList;
  11. import epson.print.IprintApplication;
  12. import epson.print.phlayout.PhotoPreview;
  13. import epson.print.phlayout.PhotoPreviewImageList;
  14. public class ApfPreviewView implements PhotoPreview.PreviewBitmapMaker {
  15. public static final String APF_RESIZE_FILE_PREFIX = "rsapf_";
  16. protected ApfAdapter mApfAdapter;
  17. private int mApfMode;
  18. protected Context mApplicationContext;
  19. private int mClearlyVividMode;
  20. protected PhotoPreview mEPPreviewImageView;
  21. private ImageSizeConversionCache mResizeCache = new ImageSizeConversionCache();
  22. private int mSharpnessValue;
  23. public void setZoomControlHandler(Handler handler) {
  24. this.mEPPreviewImageView.setZoomControlHandler(handler);
  25. }
  26. public void init(Context context, PhotoPreview photoPreview) {
  27. this.mApplicationContext = context.getApplicationContext();
  28. this.mApfAdapter = new ApfAdapter(this.mApplicationContext);
  29. this.mEPPreviewImageView = photoPreview;
  30. this.mEPPreviewImageView.setPreviewBitmapMaker(this);
  31. }
  32. public static void deleteWorkingDirectory(Context context) {
  33. ApfAdapter.clearDirectory(context);
  34. }
  35. public void invalidate() {
  36. this.mEPPreviewImageView.invalidate();
  37. }
  38. public void setIsPaperLandscape(boolean z, Activity activity) {
  39. this.mEPPreviewImageView.setIsPaperLandscape(z, activity);
  40. }
  41. public boolean getIsPaperLandscape() {
  42. return this.mEPPreviewImageView.getIsPaperLandscape();
  43. }
  44. public void setDrawEndHandler(Handler handler) {
  45. this.mEPPreviewImageView.setDrawEndHandler(handler);
  46. }
  47. public void postInvalidate() {
  48. this.mEPPreviewImageView.postInvalidate();
  49. }
  50. public void setPreviewImageView(PhotoPreview photoPreview) {
  51. this.mEPPreviewImageView = photoPreview;
  52. }
  53. public void setApfLibParams(int i, int i2, int i3) {
  54. this.mApfMode = i;
  55. this.mSharpnessValue = i2;
  56. this.mClearlyVividMode = i3;
  57. }
  58. public int getApfMode() {
  59. return this.mApfMode;
  60. }
  61. public int getSharpnessValue() {
  62. return this.mSharpnessValue;
  63. }
  64. public int getClearlyVividMode() {
  65. return this.mClearlyVividMode;
  66. }
  67. public void setImageList(@NonNull PhotoPreviewImageList photoPreviewImageList) {
  68. this.mEPPreviewImageView.setImageList(photoPreviewImageList);
  69. }
  70. public EPImageList getImageList() {
  71. return this.mEPPreviewImageView.getImageList();
  72. }
  73. public void setLayout(int i, int i2) {
  74. this.mEPPreviewImageView.setLayout(i, i2);
  75. }
  76. public boolean setPaper(int i) {
  77. return this.mEPPreviewImageView.setPaper(i);
  78. }
  79. public void setColor(int i) {
  80. this.mEPPreviewImageView.setColor(i);
  81. }
  82. public void invalidateImageNo() {
  83. this.mEPPreviewImageView.invalidateImageNo();
  84. }
  85. public void invalidatePreview() {
  86. this.mResizeCache.invalidateCache();
  87. this.mEPPreviewImageView.invalidatePreview();
  88. }
  89. public boolean setImage(int i, int i2, Activity activity) throws OutOfMemoryError {
  90. return this.mEPPreviewImageView.setImage(i, i2, activity);
  91. }
  92. public Bitmap getPreviewBitmap(EPImage ePImage, int i, int i2, int i3, boolean z) {
  93. String filename;
  94. if (this.mApfMode == 0 && this.mSharpnessValue == 0) {
  95. return null;
  96. }
  97. String apfResult = this.mApfAdapter.getApfResult(ePImage.loadImageFileName, this.mApfMode, this.mSharpnessValue, this.mClearlyVividMode);
  98. if (apfResult == null) {
  99. throw new OutOfMemoryError("in getPreviewBitmap()");
  100. } else if (z || (filename = this.mResizeCache.getFilename(apfResult, new ImageSizeConversionCache.ConvertCondition(ePImage.previewWidth, ePImage.previewHeight, i3))) == null) {
  101. Bitmap bitmapConventionally = getBitmapConventionally(ePImage, apfResult, i, i2, i3);
  102. if (bitmapConventionally != null) {
  103. return bitmapConventionally;
  104. }
  105. throw new OutOfMemoryError("in getPreviewBitmap()");
  106. } else {
  107. Bitmap decodeFile = BitmapFactory.decodeFile(filename);
  108. if (decodeFile != null) {
  109. return decodeFile;
  110. }
  111. throw new OutOfMemoryError("in getPreviewBitmap()");
  112. }
  113. }
  114. protected Bitmap getBitmapConventionally(EPImage ePImage, String str, int i, int i2, int i3) {
  115. EPImage ePImage2 = new EPImage(str, 0);
  116. new EPImageCreator(IprintApplication.getInstance()).createPreviewImage(ePImage2, i, i2, i3, true);
  117. if (ePImage2.previewImageFileName == null) {
  118. return null;
  119. }
  120. File file = new File(ePImage2.previewImageFileName);
  121. if (!file.canRead()) {
  122. return null;
  123. }
  124. ePImage.srcWidth = ePImage2.srcWidth;
  125. ePImage.srcHeight = ePImage2.srcHeight;
  126. ePImage.decodeWidth = ePImage2.decodeWidth;
  127. ePImage.decodeHeight = ePImage2.decodeHeight;
  128. ePImage.previewWidth = ePImage2.previewWidth;
  129. ePImage.previewHeight = ePImage2.previewHeight;
  130. ePImage.previewImageFileName = null;
  131. Bitmap decodeFile = BitmapFactory.decodeFile(ePImage2.previewImageFileName);
  132. File apfResizeCacheFile = getApfResizeCacheFile(file, str);
  133. if (file.renameTo(apfResizeCacheFile)) {
  134. this.mResizeCache.setFilename(str, new ImageSizeConversionCache.ConvertCondition(ePImage.previewWidth, ePImage.previewHeight, i3), apfResizeCacheFile.toString());
  135. }
  136. return decodeFile;
  137. }
  138. private File getApfResizeCacheFile(File file, String str) {
  139. File parentFile = file.getParentFile();
  140. String name = new File(str).getName();
  141. return new File(parentFile, APF_RESIZE_FILE_PREFIX + name);
  142. }
  143. }