我正在使用 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
的参数,但它仍然打印“徽标尺寸”图像,而不是整个图像。如果我减小位图中文本的字体大小,当我打印它时,我会看到更多文本,因此它可能是它将打印的内容的高度,而不是位图上的问题(当我在我的图库中打开它时)设备,很完美)。
如果您需要调整图像大小,请尝试使用此
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;
}