免責聲明:我目前正在寫一個SVG到EPL-transpiler,可以發現here
我最近面臨着同樣的問題,並與發送GW
-command到打印機解決它。
到GK
的主要區別 - GK
- GM
- GG
是,你不一起發送PCX頭,而是原始二進制數據(據我所知沒有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)
中找到。
你有沒有解決這個問題?我被困在試圖做同樣的事情 – fearofawhackplanet 2011-01-04 12:06:48
@fearofawhackplanet我目前正在實施一個POC翻譯SVG到EPL - 你可以找到相關的代碼轉換和發送* .png *文件作爲PCX的打印機:https:// github.com/dittodhole/dotnet-System.Svg.Render.EPL – 2016-05-15 16:29:46