考试差一分 2014-10-30 06:45 采纳率: 0%
浏览 4017

android系统pos机采用serialport串口操作打印机,打印出来的二维码不是正方形的

Bitmap bitmap = Create2DCode("测试二维码");


        int bmWidth = bitmap.getWidth();
        int bmHeight = bitmap.getHeight();
        byte[] data = new byte[]{0x00};
        Color prefix = new Color();
        int prefixint;
        /*
         * Set line spacing
         */
        mOutputStream_P.write(0x1b);
        mOutputStream_P.write(0x33);
        mOutputStream_P.write(8);

        int[] dots = new int[bmWidth * bmHeight];
        // //把位图的数据拷贝到dots数组中,每一个都由一个表示颜色值的int值来表示
        bitmap.getPixels(dots, 0, bmWidth, 0, 0, bmWidth, bmHeight);

        for (int i = 0; i < ((bmHeight+7)/8); i++)
        {

            mOutputStream_P.write(0x1b);
            mOutputStream_P.write(0x2a);
            mOutputStream_P.write(0);
            mOutputStream_P.write(bmWidth % 256);
            mOutputStream_P.write(bmWidth / 256);
            for (int j = 0; j < bmWidth; j++)
            {
                for (int k = 0; k < 8; k++)
                {
                    if (((i * 8) + k) < bmHeight)  // if within the BMP size
                    {
                        prefixint = bitmap.getPixel(j, (i * 8) + k);

                        if (prefix.BLACK == prefixint)
                        {
                            data[0] += (byte)(128 >> k);
                        }
                    }
                }
                mOutputStream_P.write(data);
                data[0] = 0x00;  
            }

            mOutputStream_P.write(10);
        }

/**
* 用字符串生成二维码
* @param str
* @author
* @return
* @throws WriterException
*/
public Bitmap Create2DCode(String str) throws WriterException {
Hashtable hint = new Hashtable();
hint.put(EncodeHintType.CHARACTER_SET, "GBK");
//生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, 144, 96,hint);
int width = matrix.getWidth();
int height = matrix.getHeight();
//二维矩阵转为一维像素数组,也就是一直横着排了
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if(matrix.get(x, y)){
pixels[y * width + x] = 0xff000000;//black
}else{
pixels[y * width + x] = 0xffffffff;//white
}

        }
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    //通过像素数组生成bitmap,具体参考api
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}
  • 写回答

1条回答

  • a774760644 2014-12-12 08:58
    关注

    博主,你好,问下你解决这个问题没有??

    评论

报告相同问题?

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用