图片与进制的转化之路

前言:
在日常开发过程中,会跟图片有很多的交集,比如一些简单的显示,或者是图片的加载,缩略图的放大等,也有相对比较复杂一点的,比如图片中生成二维码,或者说实现图片打印等。。。在日常开发中,我们很多时候需要对一些特定的图片格式进行处理,有的地方甚至会用到很多,接下来就分享一篇自己用到的或者说常用的图片转化为进制的工具类。注:这里的进制格式为二进制


一张360*360的图片,8个字节(8个像素点)是一个二进制,可以把二进制转化为十进制数值,中所周知,一张图片分为X轴和Y轴,其中X轴:360个像素点(0 - 359),Y轴:24个像素点为一组,即360就是15组(0-14),里面的每一组(24*360),每8个像素点为一个二进制,(每组有3个,3*8=24)。

方法一: 得到位图的某个点的像素值

 int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];// 保存所有的像素的数组,图片宽×高
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
    for (int i = 0; i < pixels.length; i++) {
                        int clr = pixels[i];
        int red = (clr & 0x00ff0000) >> 16; // 取高两位
    int green = (clr & 0x0000ff00) >> 8; // 取中两位
            int blue = clr & 0x000000ff; // 取低两位
    }

方法二 对图片进行压缩(不去除透明度)

 // 获取这个图片的宽和高
    int width = bitmapOrg.getWidth();
    int height = bitmapOrg.getHeight();
    // 定义预转换成的图片的宽度和高度
    int newWidth = 360;
    int newHeight = 360;
    // 计算缩放率,新尺寸除原始尺寸
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    // 创建操作图片用的matrix对象
    Matrix matrix = new Matrix();
    // 缩放图片动作
    matrix.postScale(scaleWidth, scaleHeight);
    // 创建新的图片
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width,height, matrix, true);
    // 将上面创建的Bitmap转换成Drawable对象,使得其可以使用在ImageView, ImageButton中

方法三 对图片进行压缩(去除透明度)

    int width = bitmapOrg.getWidth();
    int height = bitmapOrg.getHeight();
    // 定义预转换成的图片的宽度和高度
    int newWidth = 360;
    int newHeight = 360;
    Bitmap targetBmp = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888);//定义固定宽高转化为相应的图片
    Canvas targetCanvas = new Canvas(targetBmp);
    targetCanvas.drawColor(0xffffffff);
    targetCanvas.drawBitmap(bitmapOrg, new Rect(0, 0, width, height), new Rect(0, 0, newWidth, newHeight), null);

方法四 把一张Bitmap图片转化为打印机可以打印的bit

     byte[] data = new byte[16290];
    int k = 0;
    for (int j = 0; j < 15; j++) {
        data[k++] = 0x1B;
        data[k++] = 0x2A;
        data[k++] = 33; // m=33时,选择24点双密度打印,分辨率达到200DPI。
        data[k++] = 0x68;
        data[k++] = 0x01;
        for (int i = 0; i < 360; i++) {
            for (int m = 0; m < 3; m++) {
                for (int n = 0; n < 8; n++) {
                    byte b = px2Byte(i, j * 24 + m * 8 + n, bit);
                    data[k] += data[k] + b;
                }
                k++;
            }
        }
        data[k++] = 10;
    }

以上呢就是个人在日常开发中结合图片处理用到的比较多的方法,谢谢,有其他的问题欢迎提出来大家共同学习进步。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值