这是我到目前为止设置的内容
我按照本指南进行操作,现在可以将位图图像打印到收据打印机。
但是现在我会在收据打印机上将图像居中对齐,并且似乎可以理解如何在他的代码中实现这一点。有人可以帮我弄清楚在哪里插入空格来实现这一点吗?
这是取自代码的写入位数组部分:
bw.Write(AsciiControlChars.Newline);
bw.Write(" Hello World!");
bw.Write(AsciiControlChars.Newline);
bw.Write(" ");
^^^This bw.Write(" "); 移动第一行
// So we have our bitmap data sitting in a bit array called "dots."
// This is one long array of 1s (black) and 0s (white) pixels arranged
// as if we had scanned the bitmap from top to bottom, left to right.
// The printer wants to see these arranged in bytes stacked three high.
// So, essentially, we need to read 24 bits for x = 0, generate those
// bytes, and send them to the printer, then keep increasing x. If our
// image is more than 24 dots high, we have to send a second bit image
// command.
// Set the line spacing to 24 dots, the height of each "stripe" of the
// image that we're drawing.
bw.Write(AsciiControlChars.Escape);
bw.Write('3');
bw.Write((byte)24);
// OK. So, starting from x = 0, read 24 bits down and send that data
// to the printer.
int offset = 0;
while (offset < data.Height)
{
bw.Write(AsciiControlChars.Escape);
bw.Write('*'); // bit-image mode
bw.Write((byte)33); // 24-dot double-density
bw.Write(width[0]); // width low byte
bw.Write(width[1]); // width high byte
for (int x = 0; x < data.Width; ++x)
{
for (int k = 0; k < 3; ++k)
{
byte slice = 0;
for (int b = 0; b < 8; ++b)
{
int y = (((offset / 8) + k) * 8) + b;
// Calculate the location of the pixel we want in the bit array.
// It'll be at (y * width) + x.
int i = (y * data.Width) + x;
// If the image is shorter than 24 dots, pad with zero.
bool v = false;
if (i < dots.Length)
{
v = dots[i];
}
slice |= (byte)((v ? 1 : 0) << (7 - b));
}
bw.Write(slice);
}
}
offset += 24;
bw.Write(AsciiControlChars.Newline);
}
// Restore the line spacing to the default of 30 dots.
bw.Write(AsciiControlChars.Escape);
bw.Write('3');
bw.Write((byte)30);
bw.Write("Text Is awsome");
bw.Write(AsciiControlChars.Newline);
}