BMPFile.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package epson.common;
  2. import android.graphics.Bitmap;
  3. import java.io.FileOutputStream;
  4. import epson.print.copy.Component.escandevice.IScanController;
  5. public class BMPFile {
  6. private static final int BITMAPFILEHEADER_SIZE = 14;
  7. private static final int BITMAPINFOHEADER_SIZE = 40;
  8. private int bfOffBits = 54;
  9. private int bfReserved1 = 0;
  10. private int bfReserved2 = 0;
  11. private int bfSize = 0;
  12. private byte[] bfType = {66, 77};
  13. private int biBitCount = 24;
  14. private int biClrImportant = 0;
  15. private int biClrUsed = 0;
  16. private int biCompression = 0;
  17. private int biHeight = 0;
  18. private int biPlanes = 1;
  19. private int biSize = 40;
  20. private int biSizeImage = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_AUTOFIT;
  21. private int biWidth = 0;
  22. private int biXPelsPerMeter = 0;
  23. private int biYPelsPerMeter = 0;
  24. private int[] bitmap;
  25. /* renamed from: fo */
  26. private FileOutputStream f331fo;
  27. public void saveBitmap(String str, Bitmap bitmap2, int i, int i2) {
  28. try {
  29. f331fo = new FileOutputStream(str);
  30. save(bitmap2, i, i2);
  31. f331fo.close();
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. private void save(Bitmap bitmap2, int i, int i2) {
  37. try {
  38. convertImage(bitmap2, i, i2);
  39. writeBitmapFileHeader();
  40. writeBitmapInfoHeader();
  41. writeBitmap();
  42. } catch (Exception e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. private boolean convertImage(Bitmap bitmap2, int i, int i2) {
  47. bitmap = null;
  48. int i3 = i * i2;
  49. bitmap = new int[i3];
  50. bitmap2.getPixels(bitmap, 0, i, 0, 0, i, i2);
  51. biSizeImage = (i3 * 3) + ((4 - ((i * 3) % 4)) * i2);
  52. bfSize = biSizeImage + 14 + 40;
  53. biWidth = i;
  54. biHeight = i2;
  55. return true;
  56. }
  57. private void writeBitmap() {
  58. int i;
  59. byte[] bArr = new byte[3];
  60. int i2 = biWidth;
  61. int i3 = (biHeight * i2) - 1;
  62. int i4 = 4 - ((i2 * 3) % 4);
  63. if (i4 == 4) {
  64. i4 = 0;
  65. }
  66. int i5 = i3 - biWidth;
  67. int i6 = i5;
  68. int i7 = 0;
  69. int i8 = 0;
  70. int i9 = 1;
  71. while (i7 < i3 + 1) {
  72. try {
  73. if (i7 < biWidth) {
  74. i = bitmap[i5 + 1];
  75. } else {
  76. i = bitmap[i5];
  77. }
  78. bArr[0] = (byte) (i & 255);
  79. bArr[1] = (byte) ((i >> 8) & 255);
  80. bArr[2] = (byte) ((i >> 16) & 255);
  81. f331fo.write(bArr);
  82. if (i9 == biWidth) {
  83. i8 += i4;
  84. for (int i10 = 1; i10 <= i4; i10++) {
  85. f331fo.write(0);
  86. }
  87. i5 = i6 - biWidth;
  88. i6 = i5;
  89. i9 = 1;
  90. } else {
  91. i9++;
  92. }
  93. i5++;
  94. i7++;
  95. } catch (Exception e) {
  96. e.printStackTrace();
  97. return;
  98. }
  99. }
  100. int i11 = i8 - i4;
  101. bfSize += i11;
  102. biSizeImage += i11;
  103. }
  104. private void writeBitmapFileHeader() {
  105. try {
  106. f331fo.write(bfType);
  107. f331fo.write(intToDWord(bfSize));
  108. f331fo.write(intToWord(bfReserved1));
  109. f331fo.write(intToWord(bfReserved2));
  110. f331fo.write(intToDWord(bfOffBits));
  111. } catch (Exception e) {
  112. e.printStackTrace();
  113. }
  114. }
  115. private void writeBitmapInfoHeader() {
  116. try {
  117. f331fo.write(intToDWord(biSize));
  118. f331fo.write(intToDWord(biWidth));
  119. f331fo.write(intToDWord(biHeight));
  120. f331fo.write(intToWord(biPlanes));
  121. f331fo.write(intToWord(biBitCount));
  122. f331fo.write(intToDWord(biCompression));
  123. f331fo.write(intToDWord(biSizeImage));
  124. f331fo.write(intToDWord(biXPelsPerMeter));
  125. f331fo.write(intToDWord(biYPelsPerMeter));
  126. f331fo.write(intToDWord(biClrUsed));
  127. f331fo.write(intToDWord(biClrImportant));
  128. } catch (Exception e) {
  129. e.printStackTrace();
  130. }
  131. }
  132. private byte[] intToWord(int i) {
  133. return new byte[]{(byte) (i & 255), (byte) ((i >> 8) & 255)};
  134. }
  135. private byte[] intToDWord(int i) {
  136. return new byte[]{(byte) (i & 255), (byte) ((i >> 8) & 255), (byte) ((i >> 16) & 255), (byte) ((i >> 24) & 255)};
  137. }
  138. }