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图片相关推荐

  1. android img 格式文件怎么打开,heic是什么文件,安卓怎样打开heic图片?

    问题一:.heic是什么文件 解答:简单来说,heic是一种图片格式,就像我们常见的jpg.png格式一样,不同的是,heic格式是苹果手机里面的格式,自从iOS 11发布以后,只要是苹果手机拍摄的照 ...

  2. android 打开相册的权限,Android 启动系统相机,相册,裁剪图片及6.0权限管理

    在日常开发中,我们经常需要用到上传图片的 功能,这个时候通常有两种做法,第一种,从相机获取,第二种,从相册获取.今天这篇博客主要讲解利用系统的Intent怎样获取? 主要内容如下 怎样通过相机获取我们 ...

  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  4. [转]【Android】9-patch图片以及例子说明

    1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...

  5. 【转】三、QT例子-打开一个图片并且显示

    一.前言 本博客的主要目的在于对QT有进一步的了解,单纯只使用QT. 今天小例子主要是打开图片,然后显示出来,并且显示图片的路径. 二.工程建立 1.参考前面 博客一QT安装过程里面的例子, 建立一个 ...

  6. android删除打开方式,Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)...

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  7. Android 拍照后图片的旋转,合并,兼容性 相机开发

    在看这篇文章之前,我建议先看相机开发基础 针对这个功能需要做自定义相机,根据Camera相机类和SurfaceView类来实现自定义图形预览拍照功能. 但在实现过程中出现几个难点: 1.如何将自己产品 ...

  8. 【为您的 Android 应用添加图片】

    上一篇:[创建 Birthday Card 应用] 一.简介 在本文章中,您将学习如何使用 ImageView 向应用添加图片. 前提条件 了解如何在 Android Studio 中创建和运行新应用 ...

  9. 【Android学习】图片

    1,ImageView(图片视图) 1)概念 ImageView继承自View组件,它的主要功能是用于显示图片,且任何Drawable对象都可使用ImageView来显示. Android中不仅可以将 ...

最新文章

  1. 用计算机 发的,计算机的发分类及应用.ppt
  2. c# getresponsestream返回byte[]_C++模版和C#范型求同存异录(一)sizeof(T)
  3. mysql实验步骤_MySQL双方配置实验步骤
  4. easyUI的combobox的实现
  5. python items() 函数的使用(一分钟读懂)
  6. 2015到3020计算机参考文献,同等学力相关论文范文素材,与计算机网络参考文献2016年相关硕士毕业论文...
  7. python朋友圈点赞统计_微信公众号所有历史文章的标题/点赞数/阅读数统计
  8. 字体测试打分软件哪个好,准确率奇高的看图识字体网站-在线认字体
  9. 2016年英语六级翻译
  10. 查询毕业证书的(学信网查)
  11. 表贴电阻尺寸与什么有关_贴片电阻功率与尺寸对应表
  12. 苹果邮箱怎么登录qq邮箱_qq邮箱app下载安装-手机QQ邮箱2020下载v6.1.0 官方安卓版...
  13. C++ string大小写转换
  14. 1256:献给阿尔吉侬的花束
  15. 以专业的姿态铸造优质的服务——苏总
  16. 高等代数_第5章:矩阵的相抵与相似
  17. 【python】无限量PPT免费下载?找模板在不怕心仪得不能用啦
  18. FieldSet第二篇 - 动态查询优化
  19. 虚拟汽车加油问题C语言——For初学者
  20. python制作zzulioj排名动态图

热门文章

  1. 分布式理论、架构设计
  2. ORA-12514: TNS:listener does not currently know of service requested in connect descri
  3. python 用汉字组成图片
  4. iSpiik产品说:抖音-信息浓度大师连续播放功能?
  5. 蓝魔变红魔:moto是否是一条翻身的咸鱼
  6. 分享低成本制作飞行器的方法,大一团队用一个月时间低成本打造一台飞行器
  7. 区块链智能合约solidity的中的一些关键字
  8. 看不到可用网络,网络适配器出现黄色感叹号,最佳解决方案
  9. 极域电子教室软件的实施,pc客户端教学的几个主要问题
  10. 渗透技巧Checklist