EPL2 Zebraプリンター用の画像(PCX)
-
27-09-2019 - |
質問
グラフィックをEPL2プリンターに作成してアップロードするのに苦労しています。
文字通り利用可能なソフトウェアをかなり疲れてインターネットをトロールしたので、私は途方に暮れています。
次のスクリプトでアップロードしようとする1ビットファイルがあります。
setppi.txt
GK"NAMEPCX"
GK"NAMEPCX"
GM"NAMEPCX"3042
そして、でアップロードします
copy setppi.txt+ppirmt.pcx lpt1/b
髪の毛が残っているものを引き裂く前に、経験のある人がヒントを得ましたか?この問題はPCXの作成に関係していることをほぼ確信していますが、すべてのオプションを試してみて、次のステップについて確信が持てません。
解決
PCXを適切に作成するために見つけた方法は次のとおりです。
GIMPでは、ファイルを1ビット(白黒)BMPとして保存します。保存されたフォーマットは、プリンターで要求されているように1ビットPCXではないため、PCXを選択しないでください!
ImageMagickの変換プログラムを使用して、BMPをPCXに変換します。
私がそれを理解した後に私が遭遇したもう1つの問題は、グラフィックがまだ腐敗していたということでした。それはコードページの問題だったので、それに注意してください。
他のヒント
使用しているプログラミング言語については言及していません。
C#(または一般的に.net)の場合、EPLを使用した画像の印刷に関するブログ投稿を次に示します。
EPL2 GWコマンドを使用して、ゼブラサーマルプリンターに画像を送信します
そして、同じ男からの別のブログ投稿、 それは私がc#でzebraプリンターにeplを印刷することから始めました.
EPL2言語を使用してPCXグラフィックを出力する方法は2つあります。最初のものはあなたが提案したものです:
GK"namepcx"
GK"namepcx"
GM"namepcx",3042
..... and here follows monochrome PCX data ...
..... with 128-bit header and following pixel data 1 bit-per pixel..
後で、これを保存したものを書くことができるはずです 「namepcx」 GM経由のプリンターの画像バッファーには、PCXのストアを試して2日間費やしましたが、正しく保存されることはありません。だから私は単に使用することになりました GW
Pixelデータをプリンター画像バッファーに直接書き込むコマンド。 「フラッシュメモリに保存する」を避けます。また、もともとは、GMを介したこの「フラッシュ」ストレージは、すべてのラベルで繰り返される画像(ロゴなど)を保存することを目的としていました。したがって、1回保存してから、同じロゴで10 000のラベルを印刷できます。ただし、Javaからの嘆願の場合、通常、さまざまなラベルに多くの異なる画像を印刷することになります。したがって、すべてのラベルの新しい画像をフラッシュするために保存すると、フラッシュメモリが非常にすばやく「摩耗」します。 (例えば、LP 2824プリンターのマニュアルには、フラッシュメモリには100kの書き込みサイクルしかないと述べています)。
したがって、使用しているように見えるかもしれません GW
3ステップを使用する代わりに画像バッファーに直接画像を書き込む GK GM GG
より良い解決策かもしれません。
免責事項:私は現在、SVGからEPLへの移植者を書いています。 ここ
私は最近同じ問題に直面していて、 GW
- プリンターへのコマンド。
の主な違い GK
-GK
-GM
-GG
PCX-Headerを送信するのではなく、生のバイナリデータ(LRE圧縮のないAFAIK)を送信します。
ビットシフトを重視している(非最適化/ナイーブ)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)
.