Android如何把图片转为深度为32位格式为.bmp的图片
前几天公司的产品要求做个手机拍的照片转深度为32位,格式为.bmp格式的图片,仔细研究了下,通过调系统相机根据照片存的路径以及FileInputStream获得照片的bitmap,拿到这个bitmap后把数据放到下面的方法里,可获取bmp格式的图片,深度为32位的。
/** * 将Bitmap存为 .bmp格式图片 * @param bitmap */ public void saveBmp(Bitmap bitmap,long name) { if (bitmap == null) return; // 位图大小 int nBmpWidth = bitmap.getWidth(); int nBmpHeight = bitmap.getHeight(); // 图像数据大小 // int bufferSize = nBmpHeight * (nBmpWidth * 3 + nBmpWidth % 4); int bufferSize = nBmpHeight * (nBmpWidth * 4 + nBmpWidth % 5);try { // 存储文件名 // String filename = savePhoto(); String filename = savePicturePath("HanvonDataBmp");File file = new File(filename); if (!file.exists()) { file.createNewFile(); } FileOutputStream fileos = new FileOutputStream(filename); // bmp文件头 int bfType = 0x4d42; long bfSize = 14 + 40 + bufferSize; int bfReserved1 = 0; int bfReserved2 = 0; long bfOffBits = 14 + 40; // 保存bmp文件头 writeWord(fileos, bfType); writeDword(fileos, bfSize); writeWord(fileos, bfReserved1); writeWord(fileos, bfReserved2); writeDword(fileos, bfOffBits); // bmp信息头 long biSize = 40L; long biWidth = nBmpWidth; long biHeight = nBmpHeight; int biPlanes = 1; // int biBitCount = 24; int biBitCount = 32;long biCompression = 0L; long biSizeImage = 0L; long biXpelsPerMeter = 0L; long biYPelsPerMeter = 0L; long biClrUsed = 0L; long biClrImportant = 0L; // 保存bmp信息头 writeDword(fileos, biSize); writeLong(fileos, biWidth); writeLong(fileos, biHeight); writeWord(fileos, biPlanes); writeWord(fileos, biBitCount); writeDword(fileos, biCompression); writeDword(fileos, biSizeImage); writeLong(fileos, biXpelsPerMeter); writeLong(fileos, biYPelsPerMeter); writeDword(fileos, biClrUsed); writeDword(fileos, biClrImportant); // 像素扫描 byte bmpData[] = new byte[bufferSize]; //int wWidth = (nBmpWidth * 3 + nBmpWidth % 4); int wWidth = (nBmpWidth * 4 + nBmpWidth % 5);for (int nCol = 0, nRealCol = nBmpHeight - 1; nCol < nBmpHeight; ++nCol, --nRealCol) for (int wRow = 0, wByteIdex = 0; wRow < nBmpWidth; wRow++, wByteIdex += 4) { int clr = bitmap.getPixel(wRow, nCol); bmpData[nRealCol * wWidth + wByteIdex] = (byte) Color.blue(clr); bmpData[nRealCol * wWidth + wByteIdex + 1] = (byte) Color.green(clr); bmpData[nRealCol * wWidth + wByteIdex + 2] = (byte) Color.red(clr); bmpData[nRealCol * wWidth + wByteIdex+3] = (byte) Color.alpha(0xff);} fileos.write(bmpData); fileos.flush(); fileos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } protected void writeWord(FileOutputStream stream, int value) throws IOException { byte[] b = new byte[2]; b[0] = (byte) (value & 0xff); b[1] = (byte) (value >> 8 & 0xff); stream.write(b); } protected void writeDword(FileOutputStream stream, long value) throws IOException { byte[] b = new byte[4]; b[0] = (byte) (value & 0xff); b[1] = (byte) (value >> 8 & 0xff); b[2] = (byte) (value >> 16 & 0xff); b[3] = (byte) (value >> 24 & 0xff); stream.write(b); } protected void writeLong(FileOutputStream stream, long value) throws IOException { byte[] b = new byte[4]; b[0] = (byte) (value & 0xff); b[1] = (byte) (value >> 8 & 0xff); b[2] = (byte) (value >> 16 & 0xff); b[3] = (byte) (value >> 24 & 0xff); stream.write(b); }
这是一个工具方法,可直接把图片的bitmap放入里面,方法里面的第二个参数name是保存bmp格式图片的名字,savePicturePath(”photoName”)为bmp格式图片保存路径。
public String savePicturePath(String photoName) {String mFilePath = Environment.getExternalStorageDirectory().getPath();// 获取SD卡路径String fpath = "";File file = new File(mFilePath + File.separatorChar + photoName);if (!file.exists()) {file.mkdirs();}fpath = mFilePath + File.separatorChar + File.separatorChar + photoName;file = new File(fpath);if (!file.exists()) {file.mkdirs();}long picName = System.currentTimeMillis();String PicturePath = fpath + File.separatorChar + picName + ".png";file = null;return PicturePath;
}
Android如何把图片转为深度为32位格式为.bmp的图片相关推荐
- 修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位
修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位 文章目录 修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位 修改开机LOGO图片教 ...
- S37文件解析(Motorola S/EXORciser/EXORmacs/32位格式)
/// <summary> /// Motorola S/EXORciser/EXORmacs/32位格式 S-Record /// 解析 EXORciser-S19 ...
- 【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
文章目录 一.IDA 32 位 / 64 位 版本 二.汇编代码视图 IDA View-A 三.字符串窗口 Strings window 一.IDA 32 位 / 64 位 版本 IDA 安装完毕后 ...
- OpenCV - 将图片转换为深度学习模型输入格式,BGR通道转RGB,图片归一化,HWC转CHW
文章目录 1 将图片转换为深度模型输入格式 1.1 自行进行转换 1.1.1 BGR通道转RGB通道 1.1.2 图片归一化 1.1.3 HWC转CHW 1.2 使用cv::dnn::blobFrom ...
- 图片打不开怎么转换格式?怎么修改图片的格式?
很多小伙伴问有没有好用的图片格式转换软件(万能在线图片格式转换器(jpg.png.gif.webp.bmp.jp2.tiff)-压缩图),在这里推荐压缩图的图片格式转换功能,不用下载安装,在线格式转换 ...
- 设置图片格式为php,php 将bmp图片转为jpg等其他任意格式的图片
php // 例子: $path = root . ' upload/2009/06/03/124401282315771. ' ; $pathall = $path . ' bmp ' ; $mi ...
- linux32系统下载地址,deepin 15.3 32位ISO下载地址,深度系统最后支持32位的版本
目前深度操作系统deepin新版本仅提供amd64的ISO下载,从deepin 15.4就不再发布32位版本了,也就是说deepin 15.3是最后支持32位的版本,这个版本提供有deepin-15. ...
- 电脑将图片转为excel表格的几种常用方法
一.用金鸣表格文字识别在线网页版: 1.打开金鸣表格文字识别(简称金鸣识别)网站. 2.点击"点此添加图片/PDF",将待识别的门脸图片添加进去. 3.点击"提交识别&q ...
- 【IEEE754制32位浮点数】与十进制相互转换
IEEE754制32位浮点数转换为十进制 首先了解一下IEEE754制32位浮点数的存储方式 一个由IEEE745制的32位浮点数由三部分组成 组成部分 位数 含义 符号位 1位 0为正,1为负 指数 ...
最新文章
- 如何打造一流的视觉AI技术
- 图(Graph)的javascript实现
- 只有当前用户或管理员能登录到此计算机,当前登录的用户没有管理员权限。请重新以管理员身份登录,或与您的pc管理员联系。...
- 修改Static控件的字体颜色
- 两个tplink路由器有线桥接_tplink和腾达路由器有线桥接设置图解
- 对基于消息队列的Activiti异步执行器进行基准测试
- php 自带缓存,封装ThinkPhP自带的缓存机制
- 外设驱动库开发笔记24:FM24xxx系列FRAM存储器驱动
- 基克的聚合 机器人_重做秒变神器!基克的聚合成辅助标配
- Java 8 Stream 流用法及语法
- php 年月日 中文,php Date()函数输出中文年月日时分秒_PHP教程
- (王道408考研数据结构)第五章树-第三节4:树与二叉树的转换
- web api 开发记录
- Linq To Sql, 为何继承就这么费劲?
- Python办公自动化(一):从Word到Excel
- stm32定时器编码器模式原理及配置
- 不用找,你想要的餐饮酒店word模板素材都在这里
- 深入浅出mysql第二,mysql-深入浅出MySQL(第2版)-ITBook分享(pdf mongodb java javascript node )...
- Principle 5.14 完美汉化版 Mac平台交互动效设计神器
- Django 学习 Blog 实操 19 --- 统计分类、标签云下的文章数目