我觉得我在这里缺少一些简单的东西(像往常一样)。

我正在尝试使用Java读取PGM图像。 Matlab做得很好 - 在Matlab中输出图像像素(例如,一个小的32x32图像)给我这样的东西:

1 0 11 49 94 118 118 106 95 88 85 96 124 143 142 133

然而,我的Java阅读器会输出:

1 0 11 49 94 118 118 106 95 88 85 96 124 65533 65533 65533

似乎高于127的像素值用65533填充,但它确实得到一些随机值不正确,甚至几乎将整个底行分配给-1的值。

这是我正在使用的代码:

filePath = 'imagepath.pgm';

FileInputStream fileInputStream = new FileInputStream(filePath);

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));

// read the header information ...

int [][] data2D = new int [picWidth] [picHeight];

for (int row = 0; row < picHeight; row++) {

for (int col = 0; col < picWidth; col++) {

data2D[row][col] = bufferedReader.read();

System.out.print(data2D[row][col] + " ");

}

System.out.println();

}

fileInputStream.close();

非常感谢任何想法。

编辑以下是未签名的PGM值:

1 0 11 49 94 118 118 106 95 88 85 96 124 143 142 133

30 26 29 57 96 122 125 114 102 94 91 101 127 146 145 136

96 85 70 75 101 128 136 126 111 106 106 112 131 149 153 147

163 147 114 93 99 120 132 123 110 113 124 129 137 154 166 168

215 195 149 105 88 99 114 111 106 123 148 158 160 174 191 197

245 224 173 115 81 82 100 109 117 144 179 194 194 205 222 230

235 217 170 115 78 78 113 117 100 83 80 212 214 226 244 253

178 167 135 93 68 78 123 129 106 77 69 202 204 222 244 255

114 110 92 64 54 81 107 105 83 59 56 182 184 201 222 231

79 80 71 52 55 97 67 55 41 33 42 184 179 181 185 183

62 66 65 52 63 115 29 16 12 17 30 209 197 174 150 132

40 47 52 44 55 109 171 196 188 186 208 229 218 179 136 107

31 38 44 37 43 89 145 167 158 159 191 223 219 179 133 105

48 52 56 51 57 91 128 133 117 120 157 196 200 168 128 105

64 67 70 73 87 114 127 107 79 81 118 159 173 154 123 104

63 67 73 83 107 132 129 91 54 54 88 130 153 146 123 106

标题如下所示:

P5

# MatLab PGMWRITE file, saved 27-Jun-2002

16 16

255

编辑#2

以下是概念证明代码的完整输出:

Skipping unknow token: ""

Skipping unknow token: "1^vvj_XU`|���"

Skipping unknow token: ""

Skipping unknow token: "9`z}rf^[e���`UFKe��~ojjp������r]cx�{nq|������ÕiXcroj{��������sQRdmu��������٪sNNqudSP�����]DN{�jME�����rn\@6QkiS;8�����OPG47aC7)!*�����>BA4?s"

Skipping unknow token: ""

Skipping unknow token: ""

Skipping unknow token: "�Ů��(/4,7m�ļ���ڳ�k"

Skipping unknow token: "&,%+Y������۳�i04839[��ux��Ȩ�i@CFIWrkOQv���{h?CISk��[66X���{j"

Exception in thread "main" java.util.NoSuchElementException

at java.util.Scanner.throwFor(Scanner.java:838)

at java.util.Scanner.next(Scanner.java:1347)

at Test.main(Test.java:49)

抛出异常中引用的第49行是:

System.out.println(String.format("Skipping unknow token: \"%s\"", scan.next()));

问题,我确定,这些图像文件包含ASCII文本/数字以及二进制图像数据。但是,如果Java读取PNG没有问题,为什么缺乏对PGM的支持?

编辑3

好的,我发现一个有效的实现......不幸的是,它被弃用了:

filePath = "imagepath.pgm"

FileInputStream fileInputStream = new FileInputStream(filePath);

DataInputStream dis = new DataInputStream(fileInputStream);

StreamTokenizer streamTokenizer = new StreamTokenizer(dis);

// read header text using StreamTokenizer.nextToken()

data2D = new int [picWidth] [picHeight];

for (int row = 0; row < picHeight; row++) {

for (int col = 0; col < picWidth; col++) {

data2D[row][col] = dis.readUnsignedByte();

System.out.print(data2D[row][col] + " ");

}

System.out.println();

}

根据Java文档,不推荐使用StreamTokenizer(InputStream)构造函数,因为DataInputStream.readLine()方法无法正确地将原始字节转换为字符。但是,它似乎在标题上的这种特定情况下起作用,并且显然适用于随后的二进制图像数据。

不幸的是,它仍然被弃用了,似乎通过混合BufferedReader,因为文档建议只有在读取标题并尝试使用EOFException读取DataInputStream后才会生成{{1}} s原始字节。仍在寻找解决方案......

java pgm_如何用Java读取PGM图像?相关推荐

  1. java epson_如何用Java调用Epson TM-U220PD来打印USB端口

    我正试图在Windows 7中的EPSON TM-U220PD上打印,我用Java做它 . 我正在开发一个餐厅打印订单的软件 . 我在Linux上做了软件,当我在linux上连接打印机时,打印机工作得 ...

  2. java 3des_如何用Java进行3DES加密解密 java实现3des加密解密教程

    3des,全称为3DESede或TripleDES,中文解释为是三重数据加密,用户可以通过通过对DES算法进行改进,针对每个数据块进行三次DES加密,下面小编为你带来java实现3des加密解密教程! ...

  3. java读取tiff图像的像素值

    注意:读取tiff图像的像素值,并非rgb,这是GIS方向的同学应当明晓的事情. 由于本人之前糊里糊涂的将tiff图像的rgb值作为了像素值来读取,白折腾很久很久.希望这篇文章能够为正处于此时期的童鞋 ...

  4. java读取bmp图像_JAVA实现对BMP图片的读取

    BMP图片格式,是windows自带的一个图片格式,(*bmp),在windows的系统下都支持这种格式,bmp格式与设备无关的位图(DIB)格式,BMP简称位图,BMP的原始数据是没有经过压缩处理的 ...

  5. java操作geotiff_关于java使用geotools中的GeoTiffReader读取tif图像时报错

    关于java使用geotools中的GeoTiffReader读取tif图像时报错:找不到类 javax.media.jai.PlanarImage 的错误 代码放上: import java.io. ...

  6. bmp转换tiff c++代码_如何用Java语言将图像转换为PDF?Spire.PDF for Java轻松搞定

    对于开发人员,在日常工作中经常也会处理许多文档格式,将图像转换为PDF也是常有的事.那么,在Java语言开发中,如何将图像转换为PDF呢? Spire.PDF for Java支持将多种图像格式(例如 ...

  7. 如何用java股票量化交易接口读取股票数据?

    股票实时行情,可以通过两个方法来进行查看: 第一种,在百度搜索页面直接输入股票代码,如:000717,百度输入后,即可在搜索结果中看到,其中分时,就是该股票在当天的实时走向. 第二种,通过炒股软件,如 ...

  8. 如何用Java读取单元格的数据_Java读取Excel中的单元格数据

    目前网上能找到Web平台下的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel ...

  9. java编写一个函数_请教如何用java编写一个函数图像生成的应用程序?谢谢!

    展开全部 package math; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayo ...

  10. java 图片 rgb_简单的java图片处理——如何用Java读出一张图片的RGB值?

    如何用Java读出一张图片的RGB值? (牛人可以从第六步开始看,牛人看了代码就知道怎么建文件夹啦!! ) (1) 在刚刚建立项目的根目录新建一个文件夹date,例如,我的这个项目的根目录是:E:\W ...

最新文章

  1. 布隆过滤器 redis_使用基于 Redis 的 Java 布隆过滤器
  2. android+单利模式中传递context,Android的Context详解
  3. 水利水电工程管理与实务电子版习题_水利水电工程管理与实务复习题集.pdf
  4. 机器学习线性回归_机器学习-线性回归
  5. java代码修改数据库里图片_java如何修改sql存储的图片?
  6. 比特币矿业公司 Marathon 一季度产出 196 枚 BTC,共持有超 5100 枚 BTC
  7. 巩固——Vue中如何使用less和scss?
  8. EverWeb for Mac(网页设计软件)v3.5.1中文版
  9. WCF简单教程(2) 聊聊binding
  10. android toast 显示在最上面,Android Toast在屏幕上移动
  11. 如何使用电脑将png转ico格式?赶快跟着小编学起来
  12. 萌新的51之旅——串口通信(2)
  13. 【单片机仿真】(五)寻址方式 — 立即寻址与寄存器间接寻址
  14. android6自定义锁屏,Android编程之自定义锁屏实例分析
  15. 打开 igv java_【2019-04-23】 IGV打不开的处理办法
  16. 把鸡蛋放到一个篮子里,然后看好你的篮子
  17. dubbo admin安装中易踩坑点及解决方法
  18. 【python】Flask之session使用
  19. 滚动条如何设置样式和滚动条悬浮显示与隐藏
  20. python-探索性数据分析-足球赛事数据集

热门文章

  1. 神奇代码岛BOX获500万美元天使轮融资 构建编程少年元宇宙
  2. 迅雷Beta来了,这软件太实用了,磁力随心下
  3. 国内最长的地铁投影画廊在上海地铁诞生
  4. 苹果 watchOS 3.2 首个测试版:剧场模式、SiriKit
  5. java中items是什么意思,Ansible - 如何使用with_items中的寄存器名称
  6. Python3安装turtle报错 File “/tmp/pip-install-hpqxw6_s/turtle/setup.py”, line 40
  7. aidlearning开发python使用教程_极致安卓之—Aid Learning基于Jupyter开发Java和Python
  8. java计算器实训报告_Java实验报告计算器
  9. Photoshop创意设计手法14点(转)
  10. 解决visio对象在word中显示不全的问题