.NET Maui中byte[]转Bitmap打印异常:仅显示线条无完整图像
.NET Maui 图像打印仅显示单线条的问题排查
以下是针对你代码和场景的几个排查方向:
原始图像尺寸与打印机不匹配
小票打印机有固定打印宽度(比如80mm机型对应约384像素,58mm机型对应约203像素),如果你的图像宽度远超打印机支持的最大值,大概率会被压缩或截断成一条线。
建议在ByteToImage方法中添加调试代码,输出转换后Bitmap的宽高:public static Bitmap ByteToImage(byte[] blob) { var bm = BitmapFactory.DecodeByteArray(blob, 0, blob.Length); System.Diagnostics.Debug.WriteLine($"Bitmap size: {bm.Width}x{bm.Height}"); return bm; }确认宽度是否适配你的打印机型号,若不匹配,需提前将图像缩放到打印机支持的宽度。
Bitmap格式不符合打印服务要求
你使用的Woyou打印服务可能要求图像为单色(1位灰度/黑白)格式,而默认解码的Bitmap是RGB格式,导致服务端处理异常。可以尝试将Bitmap转为单色后再打印:private Bitmap ConvertToMonochrome(Bitmap originalBitmap) { var grayBitmap = Bitmap.CreateBitmap(originalBitmap.Width, originalBitmap.Height, Bitmap.Config.Argb8888); using (var canvas = new Canvas(grayBitmap)) { var paint = new Paint(); var colorMatrix = new ColorMatrix(); colorMatrix.SetSaturation(0); // 去除饱和度转为灰度 paint.SetColorFilter(new ColorMatrixColorFilter(colorMatrix)); canvas.DrawBitmap(originalBitmap, 0, 0, paint); } return grayBitmap; }调用打印前先转换:
var img = ByteToImage(image); var monoImg = ConvertToMonochrome(img); PrintBitmap(monoImg, callback);Parcel资源泄漏与传递完整性
你的PrintBitmap方法中,仅回收了__data但未回收__reply,虽然不是直接导致打印异常的原因,但可能引发后续资源问题。建议补充回收:finally { __data.Recycle(); __reply.Recycle(); // 添加该行 }同时确认
descriptor是Woyou服务的正确接口描述符,避免Transact调用时的接口不匹配。原始byte[]数据有效性验证
先将byte[]保存为本地图片文件,用图片查看器打开确认是否为完整图像。如果本地打开也显示异常,说明byte[]本身就不是有效的完整图像数据,需要排查图像生成/获取的上游逻辑。
内容的提问来源于stack exchange,提问作者Nvn
相关产品推荐
相关产品推荐

