You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitmap.createBitmap生成的Bitmap尺寸不符的原因及解决方法

核心原因:Bitmap像素密度不匹配

用Bitmap.createBitmap()创建的Bitmap,默认会继承当前设备的屏幕像素密度(比如你的设备大概率是高DPI屏幕)。调试器预览和热敏打印机都是按实际物理像素处理,但系统会根据Bitmap的density值自动做缩放适配——这就导致你看到预览尺寸缩小、打印时被裁剪的问题,而bitmap.getWidth()返回的是逻辑像素值,所以仍显示640。

解决办法

给创建的Bitmap强制设置无密度标识,让它完全以你定义的像素尺寸来处理,不受设备屏幕参数影响:

Bitmap bitmap = Bitmap.createBitmap(640, height, Bitmap.Config.ARGB_8888);
// 关键:禁用密度缩放,让Bitmap按实际像素尺寸渲染
bitmap.setDensity(Bitmap.DENSITY_NONE);
Canvas canvas = new Canvas(bitmap);

如果你的热敏打印机有固定的DPI(比如常见的203dpi),也可以针对性设置对应密度值(例如bitmap.setDensity(203)),不过用DENSITY_NONE是最稳妥的,确保完全符合你预设的640px宽度要求。

验证方式
  • 设置后查看调试器预览,应该显示为640px的实际尺寸
  • 打印bitmap.getDensity()会返回0(即Bitmap.DENSITY_NONE)
  • 测试打印,横向裁剪问题会消失

内容的提问来源于stack exchange,提问作者Andrzej Zabost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:55:49