サーマルプリンターで二次元コード画像を印刷します。

1567 ワード

最近、熱敏プリンタの二次元コードの印刷を研究しています。北洋OOSの二次開発パッケージDLLを使って、コードを参考にしてください。http://www.cnblogs.com/datacool/archive/2012/11/27/2014666.html ,次は拡張画像の印刷方法です。
/// <summary>
 ///     
 /// </summary>
 /// <param name="bmp"></param>
 public void PrintBmp(Bitmap bmp)
{

 byte[] data = new byte[] { 0x1B, 0x33, 0x00 };
 POS_WriteFile(POS_IntPtr, data, (uint)data.Length);

 data[0] = (byte)'x00';
 data[1] = (byte)'x00';
 data[2] = (byte)'x00'; // Clear to Zero.

 Color pixelColor;

 //ESC * m nL nH d1…dk       
 // ESC * m nL nH
 byte[] escBmp = new byte[] { 0x1B, 0x2A, 0x00, 0x00, 0x00 };

 escBmp[2] = (byte)'x21';

 //nL, nH
 escBmp[3] = (byte)(bmp.Width % 256);
 escBmp[4] = (byte)(bmp.Width / 256);

//          
//   
 for (int i = 0; i < (bmp.Height / 24 + 1); i++)
{
//         
 POS_WriteFile(POS_IntPtr, escBmp, (uint)escBmp.Length);
//   
 for (int j = 0; j < bmp.Width; j++)
{
 for (int k = 0; k < 24; k++)
{
 if (((i * 24) + k) < bmp.Height) // if within the BMP size
{
 pixelColor = bmp.GetPixel(j, (i * 24) + k);
 if (pixelColor.R == 0)
{
 data[k / 8] += (byte)(128 >> (k % 8));
}
}
}
//      data,24   
 POS_WriteFile(POS_IntPtr, data, (uint)data.Length);

 data[0] = (byte)'x00';
 data[1] = (byte)'x00';
 data[2] = (byte)'x00'; // Clear to Zero.
}
//  ,     
 byte[] data2 = { 0xA };
 POS_WriteFile(POS_IntPtr, data2, (uint)data2.Length);
 } // data
 byte[] data3 = { 0xA, 0xA };
 POS_WriteFile(POS_IntPtr, data3, (uint)data3.Length);