最终图像打印在纸上的大小取决于打印机,但是您可以使用 Bitmap.setDensity() 提示它应该有多大。请注意,图像密度只是嵌入在图像文件中的数字元数据,由输出设备(即打印机)来解释或遵守提示。
图像大小(以像素为单位)与实现特定大小所需设置的密度之间的关系是一个相当简单的数学运算,如果您有一个像素大小为 360x504 像素的图像并且您想打印它,那么物理大小5x7 英寸,您需要将密度设置为:360px / 5 英寸 = 72ppi。
int IMAGE_WIDTH_IN_PIXEL = 360;
int IMAGE_HEIGHT_IN_PIXEL = 504;
float TARGET_WIDTH_IN_INCH = 5;
float TARGET_HEIGHT_IN_INCH = 7;
Bitmap bitmap = Bitmap.createBitmap(IMAGE_WIDTH_IN_PIXEL, IMAGE_HEIGHT_IN_PIXEL, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
... draw something ...
// you need make sure the Bitmap had the same aspect ratio as the target printing size
assert IMAGE_WIDTH_IN_PIXEL / TARGET_WIDTH_IN_INCH == IMAGE_HEIGHT_IN_PIXEL / TARGET_HEIGHT_IN_INCH;
bitmap.setDensity(IMAGE_WIDTH_IN_PIXEL / TARGET_WIDTH_IN_INCH);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outfile);
请注意,打印图像的大小与设备的屏幕密度无关,它决定了图像在屏幕上的显示大小。
如果您有预定的打印密度,例如,大多数普通打印机至少可以以 300ppi 打印,因为它是在典型读取距离下不会出现 pixelation 的最低 ppi。如果你有一个预设的 ppi,那么当你将图像渲染到 Bitmap 时,你需要控制的是图像像素大小。这种关系再次非常简单,要以 300ppi 打印 5 英寸宽的图像,您需要 300ppi * 5 英寸 = 1500 像素宽的图像。
int TARGET_DENSITY = 300;
float PHYSICAL_WIDTH_IN_INCH = 5;
float PHYSICAL_HEIGHT_IN_INCH = 7;
Bitmap bitmap = Bitmap.createBitmap(PHYSICAL_WIDTH_IN_INCH * TARGET_DENSITY, PHYSICAL_HEIGHT_IN_INCH * TARGET_DENSITY, Bitmap.Config.ARGB_8888);
bitmap.setDensity(TARGET_DENSITY);
Canvas canvas = new Canvas(bitmap);
... draw something ...
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outfile);
如果打印机服务支持,另一种可能性是与打印请求一起单独提交预期的物理尺寸。然后打印机将忽略嵌入的密度提示并计算以该尺寸打印所需的图像密度。