Android 蓝牙连接打印机打印网络图片

news/2024/10/18 5:58:55/

实现蓝牙连接打印机打印网络图片

	经过自己一下午加一个小时的时间整理出来,希望能帮助到各位码兄弟!

主要分为以下几步:

  1. 将网络图片URL转为bitmap :其中需要进行网络请求,不可在主线程中进行,需另起一个线程,用Handler+Message进行简单传值;

     public Bitmap returnBitMap(final String url) {new Thread(new Runnable() {@Overridepublic void run() {URL myFileUrl = null;try {myFileUrl = new URL(url);} catch (MalformedURLException e) {e.printStackTrace();}try {HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();conn.setDoInput(true);conn.connect();InputStream is = conn.getInputStream();bitmap = BitmapFactory.decodeStream(is);is.close();Message message = new Message();Bundle bundle = new Bundle();message.setData(bundle);//bundle传值,耗时,效率低handler.sendMessage(message);//发送message信息message.what = 1;//标志是哪个线程传数据} catch (IOException e) {e.printStackTrace();}}}).start();Log.e("daduhui", "url转bitmap");return bitmap;
    };//接受message的信息class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (msg.what == 1) {imageView.setImageBitmap(bitmap);byte[] printData =null;try {printData = draw2PxPoint(compressPic(bitmap));} catch (IOException e) {e.printStackTrace();}}}}
    
  2. 对图片进行压缩(去除透明度):

    public static Bitmap compressPic(Bitmap bitmap) {// 获取这个图片的宽和高int width = bitmap.getWidth();int height = bitmap.getHeight();// 指定调整后的宽度和高度int newWidth = 100;int newHeight = 100;Bitmap targetBmp = Bitmap.createBitmap(newWidth, newHeight, 	Bitmap.Config.ARGB_8888);Canvas targetCanvas = new Canvas(targetBmp);targetCanvas.drawColor(0xffffffff);targetCanvas.drawBitmap(bitmap, new Rect(0, 0, width, height), new Rect(0, 0, newWidth, newHeight), null);return targetBmp;
    }
    
  3. 灰度图片黑白化,黑色是1,白色是0 :

        /**
    *      * 灰度图片黑白化,黑色是1,白色是0
    *      *
    *      * @param x   横坐标
    *      * @param y   纵坐标
    *      * @param bit 位图
    *      * @return
    *      
    */public static byte px2Byte(int x, int y, Bitmap bit) {if (x < bit.getWidth() && y < bit.getHeight()) {byte b;int pixel = bit.getPixel(x, y);int red = (pixel & 0x00ff0000) >> 16; // 取高两位int green = (pixel & 0x0000ff00) >> 8; // 取中两位int blue = pixel & 0x000000ff; // 取低两位int gray = RGB2Gray(red, green, blue);if (gray < 128) {b = 1;} else {b = 0;}return b;}return 0;}/*** 图片灰度的转化*      */private static int RGB2Gray(int r, int g, int b) {int gray = (int) (0.29900 * r + 0.58700 * g + 0.11400 * b); //灰度转化公式return gray;}
    
  4. 把一张Bitmap图片转化为打印机可以打印的字节流:

       public byte[] draw2PxPoint(Bitmap bmp) throws IOException {//用来存储转换后的 bitmap 数据。为什么要再加1000,这是为了应对当图片高度无法//整除24时的情况。比如bitmap 分辨率为 240 * 250,占用 7500 byte,//但是实际上要存储11行数据,每一行需要 24 * 240 / 8 =720byte 的空间。再加上一些指令存储的开销,//所以多申请 1000byte 的空间是稳妥的,不然运行时会抛出数组访问越界的异常。int size = bmp.getWidth() * bmp.getHeight() / 8 + 1000;byte[] data = new byte[size];int k = 0;//设置行距为0的指令data[k++] = 0x1B;data[k++] = 0x33;data[k++] = 0x00;// 逐行打印for (int j = 0; j < bmp.getHeight() / 24f; j++) {//打印图片的指令data[k++] = 0x1B;data[k++] = 0x2A;data[k++] = 33;data[k++] = (byte) (bmp.getWidth() % 256); //nLdata[k++] = (byte) (bmp.getWidth() / 256); //nH//对于每一行,逐列打印for (int i = 0; i < bmp.getWidth(); i++) {//每一列24个像素点,分为3个字节存储for (int m = 0; m < 3; m++) {//每个字节表示8个像素点,0表示白色,1表示黑色for (int n = 0; n < 8; n++) {byte b = px2Byte(i, j * 24 + m * 8 + n, bmp);data[k] += data[k] + b;}k++;}}data[k++] = 10;//换行}return data;
    }
    

后记

写的一般,如果有什么疑问,可以联系我:QQ935020635
每一个码农都闪耀着光芒!!!


http://www.ppmy.cn/news/338929.html

相关文章

android 通过wifi调用打印机

android是可以通过wifi调用打印机打印图片或者文档的&#xff0c;在API19之前&#xff0c;调用打印机是通过Socket通信然后打印东西的&#xff0c;Socket是比较原始的通信模式&#xff0c;也是相对比较底层的&#xff0c;一般通过端口连接是可以连接任意两台机器进行数据传输并…

Android连接USB打印机

项目中需要用到android设备通过USB连接热敏打印机打印图文混排的小条&#xff0c;总结一下。 外部主要是用这个方法来打印&#xff1a; /*** 打印核验小条* 子线程中运行*/private static int times 0;public void printVerifyData(String tmpName,String tmpIdNo,String cur…

Android蓝牙打印机,带你真正了解各种打印格式

本文主要讲解蓝牙打印机在打印小票的过程中&#xff0c;如何打印各种常见格式。由于之前需要调试打印格式&#xff0c;但是苦于网上没有详细的讲解教程&#xff0c;无奈只能自给自足&#xff0c;自己封装了一个。如果各位盆友正在或者曾经苦恼蓝牙打印机的打印格式&#xff0c;…

安卓系统连接打印机

因为项目需要&#xff0c;在安卓系统连接USB打印机&#xff1a; 1、尝试PRINTSHARE等软件&#xff0c;有的平板可以识别但无法打印&#xff0c;有的平板找不到打印机&#xff1b; 2、网络上理论可行的方案&#xff1a;LINUX内核加载USB打印驱动&#xff0c;再编译安卓系统&am…

安卓调用PrinterShare实现无线打印功能

最近项目需要用到蓝牙打印,百度了很多资料,关于安卓移动打印的文章都不是很详细。要知道自己去写一个蓝牙打印模块那可是一个比较大的工作量了,而且还需要对市面上的打印机进行兼容。这个我引用一篇文章大家看下: 一、Android客户端打印技术现状 云打印 在Android KitKat之…

Android-WiFi打印功能-实现

一、 简介 1. 依赖说明 1&#xff09; Android4.4&#xff08;KitKat&#xff0c;api-19&#xff09;及以上设备&#xff1b; 2&#xff09; 安装Mopria的“mopria print service”打印服务。 2. mopria print service介绍 “mopria print service”为Mopria联盟…

安卓设备连接USB打印机

首先&#xff0c;感谢CSDN这个平台&#xff0c;为广大程序员提供一个相互交流的平台&#xff0c;其次&#xff0c;感谢广大程序员&#xff0c;让我学到了很多。这篇博客的内容也是我归纳了诸多博主的内容。亲测有效。废话少说&#xff0c;直接代码 1&#xff0c;主activity p…

打印机模拟器下载

1、去苹果开发者中心下载&#xff0c;下载里面的Hardware IO Tools。 https://developer.apple.com/downloads 2、运行工具包里的Printer Simulator 3、此时模拟器和手机一样可以实现打印了。