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