Android打开.pgm图片
来源:互联网 发布:dna数据库能找人吗 编辑:程序博客网 时间:2024/04/30 18:01
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 image Bitmap bitmap = Bitmap.createBitmap(iw,ih, Bitmap.Config.ARGB_4444); bitmap.setPixels(pix,0,iw,0,0,iw,ih);
到此:就可以在ImageView上显示了。
0 0
- Android打开.pgm图片
- PGM图片的一些知识
- PGM
- 显示PGM格式图片的面板实现
- python读取pgm格式图片文件
- Android bitmap打开网络图片
- Python 代码实现 JPG图片转PGM图片
- Android 保存图片以及根据图片路径打开显示图片
- matlab把图片pgm格式转换成png格式
- matlab把图片pgm格式转换成png格式
- 【数字图像处理】pbm/pgm/ppm图片的读写(Matlab)
- 在背景为灰色的PGM图片中,提取地图。
- 图片PGM格式转化为JPG格式(MATLAB 实现)
- android中打开相机、打开相册进行图片的获取
- Android启动指定浏览器打开图片
- Android 调用相机、打开相册、裁剪图片
- Android 上打开word、excel、图片文件
- android实现ViewPager,打开app展示图片
- 算法之路(二)呈现O(logN)型的三个算法
- ubuntu下使用apt方式安装、卸载nginx
- JS注入webview
- 371SumofTwoIntegers
- Servlet生命周期与工作原理
- Android打开.pgm图片
- QoS学习笔记
- 致雅嵌入式机器人工作室----Wi-Fi遥控六自由度机械手照片
- Android进程管理之布局代码和activity
- Parcelable和Serializable的区别?
- Java守护线程与非守护线程
- DisplayUtils(尺寸相关)
- 剑指offer 面试题49 把字符串转换成整数
- STL的vector