免责声明:我目前正在编写一个 SVG-to-EPL-transpiler,可以在这里找到
我最近遇到了同样的问题,并通过向打印机发送GW
-command 解决了这个问题。
GK
- GK
- GM
-的主要区别GG
在于您不发送 PCX 标头,而是发送原始二进制数据(afaik 没有 LRE 压缩)。
我使用了以下(非优化/幼稚)C# 代码,它大量使用位移。该算法可以用任何语言实现,而且很简单:
[NotNull]
public IEnumerable<byte> GetRawBinaryData([NotNull] Bitmap bitmap,
int octetts)
{
var height = bitmap.Height;
var width = bitmap.Width;
for (var y = 0;
y < height;
y++)
{
for (var octett = 0;
octett < octetts;
octett++)
{
var value = (int) byte.MaxValue;
for (var i = 0;
i < 8;
i++)
{
var x = octett * 8 + i;
var bitIndex = 7 - i;
if (x < width)
{
var color = bitmap.GetPixel(x,
y);
if (color.A > 0x32
|| color.R > 0x96 && color.G > 0x96 && color.B > 0x96)
{
value &= ~(1 << bitIndex);
}
}
}
yield return (byte) value;
}
}
}
转换时必须记住的事情:
- 1:白点
- 0:黑点
width
必须是 8 的倍数(因为我们正在发送字节) - 上面的代码通过填充来解决这个问题
- 标签的旋转/方向!
- 此处实施了一些阈值...
我也实施了GM
- GG
,但这超出了这个答案的范围。相关代码可以在 中找到EplCommands.StoreGraphics(bitmap:Bitmap,name:string)
。