2012-02-22 10 views
0

SDKを使ってAndroidビットマップをプリンタ(モバイルBluetoothプリンタBixolon SPP R-200)に送信したいのですが、ビットマップをバイト配列に変換できます。参考のために(そして私が何を取っているのか理解するため)、Bixolonコマンドマニュアルhereを調べてください。バイト配列からxとyの上位バイトと下位バイトを決定する

次のコマンドを使用して、プリントアウトをどのように整列させるかを指示するコマンドをプリンタに送信します(左= 0、右= 2、中央= 1):

byte[] command = { 27, 97, 0 }; 

27と97はBixolonコマンドマニュアルのコマンドです。ゼロは「左揃え」を意味します。次に、SDKsのwrite(byte [])コマンドを使用してこのコマンドをプリンタに送信します(成功)。

私は問題を抱えていますどこ次のステップは次のとおりです。私は、プリンタに「印刷ラスタビットイメージ」コマンドを送信したいと最初の部分は簡単です:

byte[] command2 = { 29, 118, 48, 0, 0, 0, 0, 0 }; 

29、118と48一緒に前述のBixolonのマニュアルの126ページに記載されている "GS v 0"(上の数字にアスキー変換表を使用するとリテラル変換)というコマンドを作ります。私が想定

xL xH yL yH d1...d 

:により置換されるマニュアルに従って、残りの4つのゼロがある:最初のゼロは、今203

私は立ち往生午前部に水平および垂直DPIを設定しますbe x Position Low Byte、x Position High Byte、y position Low byte etc ...(d1 ... dが何を意味するのかはわかりません)。

SDKには、彼らは次のコードでこれらの最後の4つのバイトを充填している:

int width = myBitmap.getWidth(); 
    int height = myBitmap.getHeight(); 
    int bytesOfWidth = width/8 + (width % 8 != 0 ? 1 : 0); 

    dimensionCommand[4] = (byte) (bytesOfWidth % 256); 
    dimensionCommand[5] = (byte) (bytesOfWidth/256); 
    dimensionCommand[6] = (byte) (height % 256); 
    dimensionCommand[7] = (byte) (height/256); 

しかし、私はなぜ理解していません。これは、x/y位置の上位バイトと下位バイトを計算する方法ですか?

しかし、このコマンドをプリンタに送信すると、最後のステップでバイト配列に変換されたビットマップも正常に転送されます(少なくともIOエラーは発生しません)が、何も印刷されません用紙は移動し、用紙の左側には2つのピクセルが印刷されているように見えます)。だから私は多分xの上位バイトと下位バイトの上記の計算を疑われ、ビットマップのy座標が間違っている...

答えて

0

int bytesOfWidth = width/8 + (width % 8 != 0 ? 1 : 0); 
dimensionCommand[4] = (byte) (bytesOfWidth % 256); 
dimensionCommand[5] = (byte) (bytesOfWidth/256); 

は不審に見えます。私は高さのための幅と同じ計算を使用します。私はまた、ビット単位のAND、代わりに比べてかなり遅いです%/演算子、ビットシフトを使用します。

int width = myBitmap.getWidth(); 
int height = myBitmap.getHeight(); 

dimensionCommand[4] = (byte) (width & 0xFF); 
dimensionCommand[5] = (byte) ((width >> 8) & 0xFF); 
dimensionCommand[6] = (byte) (height & 0xFF); 
dimensionCommand[7] = (byte) ((height >> 8) & 0xff); 
+0

あなたの提案をお寄せいただきありがとうございます。私は試しましたが、まだ変更はありませんでしたが、これはプリンタの通信に関する別の問題が原因である可能性がありますので、あなたの答えは正しいかもしれません。 – AgentKnopf

0

はbytesOfWidthの計算は、それは意味がないことを失います。幅を通すだけです。

このヘッダーに続くバイトd1、d2、... d3は、ラスター* d * ataです。 the online manualによると、このラスタデータは、1ピクセルあたり1 バイトのです。私は前の質問を前提と思っています。

+0

あなたはAleksのようにそれを渡すことを意味するか、単に使用します:dimensionCommand [4] =(byte)(width); dimensionCommand [5] =(バイト)(幅); dimensionCommand [6] =(バイト)(高さ); ... 計算が一切ありませんか? – AgentKnopf

+0

追加ノート:私はBixolonのSDKメソッドBxlBitmap.bitmap2printerData(ビットマップ、幅、レベル)を使用してビットマップ(Bitmap.Config.RGB_565を使用して作成)を変換していますが、私のビットマップが乱されていないという保証があります。しかし、SDKはその方法を使用してビットマップを印刷します。これは、印刷の試みとは対照的です。 – AgentKnopf

+0

私はAleksの提案は見ませんでしたが、はい、そうです。 –

関連する問題