Android打开.pgm图片
1.关于.pgm图片
.pgm图片格式:参见 点击打开链接
.pgm图片格式非常简单,它没有对图片进行压缩,因此一张.pgm图片会比其他显示内容相当的图片大很多。直接在java里面打开是很容易点击打开链接。但是我要在android手机上打开,让其显示在ImageView上,但是Android并没有提供打开.pgm图片的方法。原本的思路就是移植java代码,但是在Android中导入java.awt.*包是一件很麻烦的事情,基本不可行。因此,我只能通过图片的数据来构造这个图片。思路就是读取图片的像素数据,通过Android中Bitmap的构造方法,将其构造出来。
2.代码
首先:
借助一个类来解析.pgm格式的数据
public class PGM
{char ch0, ch1;int width, height;int maxpix;DataInputStream in;public void readPGMHeader(String name){try{FileInputStream fin = new FileInputStream(name); in = new DataInputStream(fin);ch0 = (char)in.readByte();ch1 = (char)in.readByte();if(ch0 != 'P' || ch1 != '5'){System.out.print("Not a pgm image!"+" [0]="+ch0+", [1]="+ch1);System.exit(0);}in.readByte(); //读空格char c = (char)in.readByte();if(c == '#') //读注释行{do{c = (char)in.readByte();}while((c != '\n') && (c != '\r'));c = (char)in.readByte();}//读出宽度if(c < '0' || c > '9'){System.out.print("Errow!");System.exit(1);}int k = 0;do{k = k*10+c-'0';c = (char)in.readByte();}while(c >= '0' && c <= '9');width = k;//读出高度c = (char)in.readByte();if(c < '0' || c > '9'){System.out.print("Errow!");System.exit(1);}k = 0;do{k = k*10+c-'0';c = (char)in.readByte();}while(c >= '0' && c <= '9');height = k;//读出灰度最大值(尚未使用)c = (char)in.readByte();if(c < '0' || c > '9'){System.out.print("Errow!");System.exit(1);}k = 0;do{k = k*10 + c - '0';c = (char)in.readByte();}while(c >= '0' && c <= '9');maxpix = k;}catch(IOException e1){System.out.println("Exception!");} }public void readPPMHeader(String name){try{FileInputStream fin = new FileInputStream(name); in = new DataInputStream(fin);ch0 = (char)in.readByte();ch1 = (char)in.readByte();if(ch0 != 'P' || ch1 != '6'){System.out.print("Not a pgm image!"+" [0]="+ch0+", [1]="+ch1);System.exit(0);}in.readByte(); //读空格//读出宽度char c = (char)in.readByte();if(c < '0' || c > '9'){System.out.print("Errow!");System.exit(1);}int k = 0;do{k = k*10+c-'0';c = (char)in.readByte();}while(c >= '0' && c <= '9');width = k;//读出高度c = (char)in.readByte();if(c < '0' || c > '9'){System.out.print("Errow!");System.exit(1);}k = 0;do{k = k*10+c-'0';c = (char)in.readByte();}while(c >= '0' && c <= '9');height = k;//读出灰度最大值(尚未使用)c = (char)in.readByte();if(c < '0' || c > '9'){System.out.print("Errow!");System.exit(1);}k = 0;do{k = k*10 + c - '0';c = (char)in.readByte();}while(c >= '0' && c <= '9');maxpix = k;}catch(IOException e1){System.out.println("Exception!");} }/**************************************************************** 读入.pgm或.ppm文件* type 5:pgm, 6:ppm***************************************************************/public int[] readData(int iw, int ih, int type){int[] pixels = new int[iw*ih];try{if(type == 5){ //读入图像灰度数据, 并生成图像序列for(int i = 0; i < iw*ih; i++){ int b = in.readByte();if(b < 0) b = b + 256;pixels[i] = (255<<24)|(b<<16)|(b<<8)|b;} }else if(type == 6){ for(int i = 0; i < iw*ih; i++){ int r = in.readByte();if(r < 0) r = r + 256;int g = in.readByte();if(g < 0) g = g + 256;int b = in.readByte();if(b < 0) b = b + 256;pixels[i] = (255<<24)|(r<<16)|(g<<8)|b;}} }catch(IOException e1){System.out.println("Exception!");} return pixels; }public char getCh0(){return ch0;} public char getCh1(){return ch1;}public int getWidth(){return width;} public int getHeight(){return height;}public int getMaxpix(){return maxpix;}
}
从代码可以看出,这个类不但可以解析.pgm图片,还可以解析.ppm图片。
然后:
在android中构建Bitmap
String path = "你的.pgm路径";int iw, ih;int[] pix;PGM pgm = new PGM();pgm.readPGMHeader(path);iw = pgm.getWidth();ih = pgm.getHeight();pix = pgm.readData(iw, ih, 5); //P5-Gray imageBitmap bitmap = Bitmap.createBitmap(iw,ih, Bitmap.Config.ARGB_4444);bitmap.setPixels(pix,0,iw,0,0,iw,ih);
到此:就可以在ImageView上显示了。
Android打开.pgm图片相关推荐
- android img 格式文件怎么打开,heic是什么文件,安卓怎样打开heic图片?
问题一:.heic是什么文件 解答:简单来说,heic是一种图片格式,就像我们常见的jpg.png格式一样,不同的是,heic格式是苹果手机里面的格式,自从iOS 11发布以后,只要是苹果手机拍摄的照 ...
- android 打开相册的权限,Android 启动系统相机,相册,裁剪图片及6.0权限管理
在日常开发中,我们经常需要用到上传图片的 功能,这个时候通常有两种做法,第一种,从相机获取,第二种,从相册获取.今天这篇博客主要讲解利用系统的Intent怎样获取? 主要内容如下 怎样通过相机获取我们 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- [转]【Android】9-patch图片以及例子说明
1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...
- 【转】三、QT例子-打开一个图片并且显示
一.前言 本博客的主要目的在于对QT有进一步的了解,单纯只使用QT. 今天小例子主要是打开图片,然后显示出来,并且显示图片的路径. 二.工程建立 1.参考前面 博客一QT安装过程里面的例子, 建立一个 ...
- android删除打开方式,Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)...
Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...
- Android 拍照后图片的旋转,合并,兼容性 相机开发
在看这篇文章之前,我建议先看相机开发基础 针对这个功能需要做自定义相机,根据Camera相机类和SurfaceView类来实现自定义图形预览拍照功能. 但在实现过程中出现几个难点: 1.如何将自己产品 ...
- 【为您的 Android 应用添加图片】
上一篇:[创建 Birthday Card 应用] 一.简介 在本文章中,您将学习如何使用 ImageView 向应用添加图片. 前提条件 了解如何在 Android Studio 中创建和运行新应用 ...
- 【Android学习】图片
1,ImageView(图片视图) 1)概念 ImageView继承自View组件,它的主要功能是用于显示图片,且任何Drawable对象都可使用ImageView来显示. Android中不仅可以将 ...
最新文章
- 用计算机 发的,计算机的发分类及应用.ppt
- c# getresponsestream返回byte[]_C++模版和C#范型求同存异录(一)sizeof(T)
- mysql实验步骤_MySQL双方配置实验步骤
- easyUI的combobox的实现
- python items() 函数的使用(一分钟读懂)
- 2015到3020计算机参考文献,同等学力相关论文范文素材,与计算机网络参考文献2016年相关硕士毕业论文...
- python朋友圈点赞统计_微信公众号所有历史文章的标题/点赞数/阅读数统计
- 字体测试打分软件哪个好,准确率奇高的看图识字体网站-在线认字体
- 2016年英语六级翻译
- 查询毕业证书的(学信网查)
- 表贴电阻尺寸与什么有关_贴片电阻功率与尺寸对应表
- 苹果邮箱怎么登录qq邮箱_qq邮箱app下载安装-手机QQ邮箱2020下载v6.1.0 官方安卓版...
- C++ string大小写转换
- 1256:献给阿尔吉侬的花束
- 以专业的姿态铸造优质的服务——苏总
- 高等代数_第5章:矩阵的相抵与相似
- 【python】无限量PPT免费下载?找模板在不怕心仪得不能用啦
- FieldSet第二篇 - 动态查询优化
- 虚拟汽车加油问题C语言——For初学者
- python制作zzulioj排名动态图
热门文章
- 分布式理论、架构设计
- ORA-12514: TNS:listener does not currently know of service requested in connect descri
- python 用汉字组成图片
- iSpiik产品说:抖音-信息浓度大师连续播放功能?
- 蓝魔变红魔:moto是否是一条翻身的咸鱼
- 分享低成本制作飞行器的方法,大一团队用一个月时间低成本打造一台飞行器
- 区块链智能合约solidity的中的一些关键字
- 看不到可用网络,网络适配器出现黄色感叹号,最佳解决方案
- 极域电子教室软件的实施,pc客户端教学的几个主要问题
- 渗透技巧Checklist