图片与进制的转化之路
前言:
在日常开发过程中,会跟图片有很多的交集,比如一些简单的显示,或者是图片的加载,缩略图的放大等,也有相对比较复杂一点的,比如图片中生成二维码,或者说实现图片打印等。。。在日常开发中,我们很多时候需要对一些特定的图片格式进行处理,有的地方甚至会用到很多,接下来就分享一篇自己用到的或者说常用的图片转化为进制的工具类。注:这里的进制格式为二进制
一张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;}
以上呢就是个人在日常开发中结合图片处理用到的比较多的方法,谢谢,有其他的问题欢迎提出来大家共同学习进步。。
图片与进制的转化之路相关推荐
- 16进制ff转化为二进制_3秒钟快速转换十六进制为二进制
这里介绍下如何快速将十六进制转换为二进制: 举例,ipv6地址:FE80::1 先将FE80拆分为FE和80,我们知道F是十进制的15,E为14,我们知道二进制的八位组,全为1时(1111 1111) ...
- 将一个10进制数转化为任意进制数 猜拳小游戏
1.如何将一个10进制数,转化为2~16进制之间的数.且当数字>=10时,输出相对应的字母A~F 2.制作一个猜拳的小游戏 一.10进制转化为任意进制 1.首先知道进制的转化规则------可参 ...
- UVa 11121 - Base -2 负进制的转化和推广
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- SQL 16进制数转化10进制
16进制数"0X00037FFE9994EE5E"转化为10进制是多少? 我们用SQL转化察看下: select CONVERT(bigint,cast(0X00037FFE999 ...
- 10进制小数转化为任意进制小数
将任意十进制正小数分别转换成2,3,4,5,6,7,8,9进制正小数,小数点后保留8位,并输出.例如:若十进制小数为0.795,则输出: 十进制正小数 0.795000 转换成 2 进制数为: 0.1 ...
- 任意进制转换(转化器,算法,类)
介绍 此类库支持2(二进制)到36之间任意进制的转换. 类库提供了一些常见的转换(如二进制到十进制),也支持高级的转换(如20进制到5进制) 快速使用:内置转换器 Convert.BinToDec.C ...
- string char* 16进制数字转化 unsigned char* 转化 字符串拼接
项目中用到了16进制数字的转化 , 但是输出的是通过sha1加密,字符是两两转化为16进制数,要求是将其连接起来发送成一个字符串. 首先 要用到string时需要加载相关的头文件 #include & ...
- 16进制/10进制数转化为浮点型案例
#include <stdio.h> #include <stdint.h> //共用体,单精度浮点型和整型数共用内存存储 typedef union { float f ...
- ASCII表完整版(包含16进制对应表)——看看16进制与10进制的转化
ASCII码表完整版 ASCII值 16进制 控制字符 ASCII值 16进制 控制字符 0 00H NUT 32 20H (space) 1 01H SOH 33 21H ! 2 02H STX 3 ...
最新文章
- 针对$_SERVER[’PHP_SELF’]的跨站脚本攻击(XSS)
- [SCOI2008] 奖励关
- 两个list关联合并_算法分享---两个有序链表的合并(C语言)
- OSPF中DR和BDR作用简述
- html5调盒子边框大小,CSS3 - 盒子大小(CSS3 - Box Sizing)
- python出现Unresolved import:库名,已解决
- sqlserver中的dateadd和datediff
- 安卓直播详细教程(一)-----bilibili开源播放器
- ACL实验详细过程讲解
- iphone pop服务器没有响应,iPhone 6 Plus跳屏或者触摸失灵的解决办法
- 11年的macbook还能用吗_致我2011年买的macbook pro 15寸一封信
- 教程丨一文了解如何在OpenSea上创建自己的NFT商店
- SpringBoot——自学笔记
- FBW7通过端粒脱帽介导肺纤维化和衰老
- 比ping更强大的fping
- 【高级篇 / HA】(6.0) ❀ 03. 通过命令切换 HA 主备 ❀ FortiGate 防火墙
- 苹果消息推送服务教程:第二部分(共2部分)
- SpringMVC从基础到源码
- Window.clearTimeout() 方法取消由 setTimeout() 方法设置的 timeout
- 生活中的法则II(转载)