2016-05-16 9 views
2

Esc/Posを使用して、プリンタのNVグラフィックスメモリにビットマップイメージをアップロードします。JAVA ESC PosアップロードNVグラフィックからプリンタ

Esc/PosマニュアルのGS (L/GS 8 L<Function 67>を使用しています。

<Function 65><Function 66>を使用して、グラフィックスのすべてまたは1つを削除することができます。

ビットマップを関数に追加するときに何か不足していることが分かりました。

Heresは、ビットマップを含む私のコマンド文字列です。 bitmapStringは、ファイルヘッダ除去ビットマップのInfoヘッダ(最初の62バイト)(DataOffset)を有する:

String bitmapString = new String(bitmapBytes, Charsets.US_ASCII); 
bitmapString = bitmapString.substring(DataOffset, bitmapStringSize); 
String commandString = ""; 

int commandLength = (bitmapStringSize.length) + 11; 
    pL = commandLength % 256; 
    if (commandLength < 256) { 
     pH = 0; 
    } else { 
     pH = (commandLength - pL)/256; 
    } 

    xL = bitmapWidth % 256; 
    if (bitmapWidth < 256) { 
     xH = 0; 
    } else { 
     xH = (bitmapWidth - (bitmapWidth % 256))/256; 
    } 

    yL = bitmapHeight % 256; 
    if (bitmapHeight < 256) { 
     yH = 0; 
    } else { 
     yH = (bitmapHeight - (bitmapHeight % 256))/256; 
    } 

    commandString 
      += Utils.H("1B")// 27 
      + Utils.H("40") // 64 
      + Utils.H("1B") // 27 
      + Utils.H("3D") // 61 
      + Utils.H("01") // 1 

      + Utils.H("1D") // GS = 29 
      + Utils.H("28") // (= 40 
      + Utils.H("4C") // L = 76 

      + Utils.D(pL) // pL 
      + Utils.D(pH) // pH 

      + Utils.H("30") // m = 48 
      + Utils.H("43") // fn = 67 
      + Utils.H("30") // a = 48 

      + Utils.H(KC1) // kc1 
      + Utils.H(KC2) // kc2 

      + Utils.H("01") // b = 1 

      + Utils.D(xL) // xL 
      + Utils.D(xH) // xH 
      + Utils.D(yL) // yL 
      + Utils.D(yH) // yH 

      + Utils.H("31");// c = 49 

    commandString += bitmapString; 

Iが開き、プリンタに書き込むEPOS-Print.jarを使用している:

EpsonIo epsonio = new EpsonIo(); 
byte[] commandBytes = commandString.getBytes(Charsets.US_ASCII); 

     epsonio.open(DevType.BLUETOOTH, MAC, null, ESCPosService.this); 

     while (n > 0) { 

      epsonio.write(commandBytes, i, n > bufferSize ? bufferSize : n, SEND_TIMEOUT); 

      Thread.sleep(450); 

      i += bufferSize; 
      n -= bufferSize; 
     } 

しかし、私はそれが歪んでいるグラフィック印刷するとき:

enter image description here

答えて

2

を、私は問題を解決してきました。

送信されるビットマップバイトは、以下の方法でデコードする必要があります。このメソッドは、ビットマップピクセルを単色のバイトに変換します。 1または0です。

今後このヘルプがお役に立てば幸いです!

public static byte[] decodeBitmap(byte[] bitmapBytes) { 

    Bitmap bmp = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length); 

    int zeroCount = bmp.getWidth() % 8; 
    String zeroStr = ""; 
    if (zeroCount > 0) { 
     for (int i = 0; i < (8 - zeroCount); i++) { 
      zeroStr = zeroStr + "0"; 
     } 
    } 

    List<String> list = new ArrayList<>(); 
    for (int i = 0; i < bmp.getHeight(); i++) { 
     StringBuilder sb = new StringBuilder(); 
     for (int j = 0; j < bmp.getWidth(); j++) { 
      int color = bmp.getPixel(j, i); 

      int r = (color >> 16) & 0xff; 
      int g = (color >> 8) & 0xff; 
      int b = color & 0xff; 

      // if color close to white,bit='0', else bit='1' 
      if (r > 160 && g > 160 && b > 160) 
       sb.append("0"); 
      else 
       sb.append("1"); 
     } 
     if (zeroCount > 0) { 
      sb.append(zeroStr); 
     } 

     list.add(sb.toString()); 
    } 

    List<String> bmpHexList = binaryListToHexStringList(list); 
    List<String> commandList = new ArrayList<>(); 
    commandList.addAll(bmpHexList); 

    return hexListToBytes(commandList); 
} 
関連する問題