In the Phimpme Android application, users can perform various operations on the photos available such as copy, move, add the image to favourites collection, share the images with others, use it as covers, wallpapers and much more. However one another important functionality that has been added in the Phimpe Android application is printing of images. In this post we will be discussing about the implementation of the above mentioned functionality.
Step 1
First we need to create an instance of the class PrintHelper passing context as the constructor parameter which can be done with the following line of code.
PrintHelper photoPrinter = new PrintHelper(this); |
Step 2
Now a function call of setScalemode() is done where we require passing a parameter out of the two options SCALE_MODE_FIT and SCALE_MODE_FILL. The difference between the two options is explained below.
SCALE_MODE_FIT – This option sizes the image so that the whole image is displayed within the printable area of the page.
SCALE_MODE_FILL– This option scales the image so that it fills the entire printable area of the page. Choosing this setting means that some portion of the top and bottom, or left and right edges of the image is left out. This option is the default value if no scale mode is set.
Though neither of the scaling options alter the existing aspect ratio of the image, we are going with the latter of the two as the requirement here is to display the whole image in the printable area. The following code snippet is used to perform the desired function call.
photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT); |
Step 3
After obtaining an instance of the class PrintHelper and calling the function setScalemode with the proper scale parameter, the path of the image to be printed is extracted and is passed in as a parameter to the decodefile function of the class BitmapFactory which has another parameter.
A Bitmap object is the return result of the operation performed by the function decodefile. The Bitmap object is thereafter passed in as a parameter to the printBitmap() function of the PrintHelper class along with a string attribute which will denote the file name of the printed photo. The code snippet to the above mentioned operations are given below.
Bitmap bitmap = BitmapFactory.decodeFile(getAlbum().getCurrentMedia().getPath(), new BitmapFactory.Options()); photoPrinter.printBitmap(getString(R.string.print), bitmap); |
After the printbitmap() is called no further action is required from the side of the application. The Android system print interface appears where the users can select the printing options. The user can proceed to print the image or cancel the operation. If the user decides to proceed with the operation a print job is created and printing operation notification appears in the system navigation bar. The system print interface appearing is displayed below.
This is how we have achieved the functionality of printing images in the Phimpme Android application. To get the full source code, please refer to the Phimpme Android GitHub repository listed in the resources section below.
Resources
1.Android Developer Guide – https://developer.android.com/training/printing/index.html
2.Github-Phimpme Android Repository – https://github.com/fossasia/phimpme-android/
3.PrintHelper Class Guide – https://developer.android.com/reference/android/support/v4/print/PrintHelper.html