打印图像ESC/POS

问题描述 投票:0回答:1

我正在使用 this API 通过蓝牙连接在热敏打印机中打印图像。我使用分辨率为 3840x2160 的图像进行了测试,并且打印效果完美。我使用 SkiaSharp 绘制了一个位图,并将其保存在我的设备上,但我正在尝试打印它,但无法设置高度。

我尝试了一些解决方案:

1280x720

720x720

即使我的图像有 3840 的宽度(例如链接的示例),该函数将限制设置为 372,并且它可以工作,但不能使用高度。

我无法控制高度,它正在剪切我的位图,甚至连一半都没有打印。

我的位图是一个列表,宽度可能为 372,高度为 800。

代码:

            EPSON e = new EPSON();
            ConnectBluetooth("ThermalPrinter");
            var outStream = (OutputStreamInvoker)socket.OutputStream;
            string directory = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
            string logoPath = System.IO.Path.Combine(directory, "bmp.png");
            var logo = System.IO.File.ReadAllBytes(logoPath);

            byte[] buffer = null;

            buffer = ByteSplicer.Combine(
                e.PrintImage(logo, true, true, 372, 0)
            );
            await outStream.WriteAsync(buffer, 0, buffer.Length);
            buffer = null;

            socket.Close();
            socket.Dispose();

PrintImage
上,它会转到:

byte[] PrintImage(byte[] image, bool isHiDPI, bool isLegacy = false, int maxWidth = -1, int color = 1)

我收到了这个

byte[]
并发送打印。链接这里

PS:我已经更改了

PrintImage
的参数,但它仍然打印“徽标尺寸”图像,而不是整个图像。如果我减小位图中文本的字体大小,当我打印它时,我会看到更多文本,因此它可能是它将打印的内容的高度,而不是位图上的问题(当我在我的图库中打开它时)设备,很完美)。

c# xamarin printing escpos
1个回答
0
投票

如果您需要调整图像大小,请尝试使用此

    public Image EscalarImagen(Image imagen, int maxAncho, int maxAlto)
    {
        var ratioX = (double)maxAncho / imagen.Width;
        var ratioY = (double)maxAlto / imagen.Height;
        var ratio = Math.Min(ratioX, ratioY);

        var newWidth = (int)(imagen.Width * ratio);
        var newHeight = (int)(imagen.Height * ratio);

        var newImage = new Bitmap(newWidth, newHeight);
        Graphics.FromImage(newImage).DrawImage(imagen, 0, 0, newWidth, newHeight);
        return newImage;
    }
© www.soinside.com 2019 - 2024. All rights reserved.