Merge "Support grayscale bitmap" into mnc-dev
diff --git a/v4/kitkat/android/support/v4/print/PrintHelperKitkat.java b/v4/kitkat/android/support/v4/print/PrintHelperKitkat.java
index b827b1f..091d5a4 100644
--- a/v4/kitkat/android/support/v4/print/PrintHelperKitkat.java
+++ b/v4/kitkat/android/support/v4/print/PrintHelperKitkat.java
@@ -18,8 +18,13 @@
import android.content.Context;
import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
import android.graphics.Matrix;
+import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.pdf.PdfDocument.Page;
import android.net.Uri;
@@ -208,16 +213,20 @@
WriteResultCallback writeResultCallback) {
PrintedPdfDocument pdfDocument = new PrintedPdfDocument(mContext,
mAttributes);
+
+ Bitmap maybeGrayscale = convertBitmapForColorMode(bitmap,
+ mAttributes.getColorMode());
try {
Page page = pdfDocument.startPage(1);
RectF content = new RectF(page.getInfo().getContentRect());
- Matrix matrix = getMatrix(bitmap.getWidth(), bitmap.getHeight(),
+ Matrix matrix = getMatrix(
+ maybeGrayscale.getWidth(), maybeGrayscale.getHeight(),
content, fittingMode);
// Draw the bitmap.
- page.getCanvas().drawBitmap(bitmap, matrix, null);
+ page.getCanvas().drawBitmap(maybeGrayscale, matrix, null);
// Finish the page.
pdfDocument.finishPage(page);
@@ -245,6 +254,10 @@
/* ignore */
}
}
+ // If we created a new instance for grayscaling, then recycle it here.
+ if (maybeGrayscale != bitmap) {
+ maybeGrayscale.recycle();
+ }
}
}
@@ -401,6 +414,10 @@
if (callback != null) {
callback.onFinish();
}
+ if (mBitmap != null) {
+ mBitmap.recycle();
+ mBitmap = null;
+ }
}
@Override
@@ -409,6 +426,8 @@
WriteResultCallback writeResultCallback) {
PrintedPdfDocument pdfDocument = new PrintedPdfDocument(mContext,
mAttributes);
+ Bitmap maybeGrayscale = convertBitmapForColorMode(mBitmap,
+ mAttributes.getColorMode());
try {
Page page = pdfDocument.startPage(1);
@@ -419,7 +438,7 @@
content, fittingMode);
// Draw the bitmap.
- page.getCanvas().drawBitmap(mBitmap, matrix, null);
+ page.getCanvas().drawBitmap(maybeGrayscale, matrix, null);
// Finish the page.
pdfDocument.finishPage(page);
@@ -447,6 +466,10 @@
/* ignore */
}
}
+ // If we created a new instance for grayscaling, then recycle it here.
+ if (maybeGrayscale != mBitmap) {
+ maybeGrayscale.recycle();
+ }
}
}
};
@@ -541,4 +564,23 @@
}
}
}
+
+ private Bitmap convertBitmapForColorMode(Bitmap original, int colorMode) {
+ if (colorMode != COLOR_MODE_MONOCHROME) {
+ return original;
+ }
+ // Create a grayscale bitmap
+ Bitmap grayscale = Bitmap.createBitmap(original.getWidth(), original.getHeight(),
+ Config.ARGB_8888);
+ Canvas c = new Canvas(grayscale);
+ Paint p = new Paint();
+ ColorMatrix cm = new ColorMatrix();
+ cm.setSaturation(0);
+ ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
+ p.setColorFilter(f);
+ c.drawBitmap(original, 0, 0, p);
+ c.setBitmap(null);
+
+ return grayscale;
+ }
}
\ No newline at end of file