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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:52:38