关于createImage(InputStream stream)创建大图片的问题

littlepboy 2008-12-08 03:49:40
我通过HTTP下载了一幅大图片(尺寸大于手机屏幕,400x300),
然后向用createImage(InputStream stream)来创建并显示,
记过抛出了异常,创建失败。在网上找了些文章,
说有些手机不能创建大于手机屏幕的图片,那该怎么办呢?

我本来是创建出来以后直接在ImageItem中就显示了,很方便,
在模拟器上没有问题,到手机上就出问题。有没有简单的办法?
...全文
318 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hljztl 2010-06-22
  • 打赏
  • 举报
回复
ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

int ch;
while ((ch = iStrm.read()) != -1)
bStrm.write(ch);

// Place into image array
byte imageData[] = bStrm.toByteArray();

// Create the image from the byte array
im = Image.createImage(imageData, 0, imageData.length);
littlepboy 2008-12-09
  • 打赏
  • 举报
回复
大家对我的帮助太大了,加分感谢。
fuyueyue 2008-12-08
  • 打赏
  • 举报
回复
学习
doney_dongxiang 2008-12-08
  • 打赏
  • 举报
回复
赞同,学习把,可能会有的问题,都被他们说了
kf156 2008-12-08
  • 打赏
  • 举报
回复
windowsMobile好像是可以再装过虚拟机
不过具体的你可能得上网查下
littlepboy 2008-12-08
  • 打赏
  • 举报
回复
那有没有办法让手机的虚拟机支持jpg,或替换支持的虚拟机呢?
kf156 2008-12-08
  • 打赏
  • 举报
回复
如果你一定要支持只能自己解码了

像手机游戏一般都是用PNG格式的

String encoding = System.getProperty("video.snapshot.encodings");
这是得到调用手机拍照时使用的参数,不过用来获取支持的图片格式也有道理
得到null是厂商没实现。支不支持还是以自己实际测试结果为主。

高级界面的要看手机厂商是怎样实现的了
littlepboy 2008-12-08
  • 打赏
  • 举报
回复
那可能就是我手机的JVM不支持jpg了,好挫啊,有没有办法让它支持?
目前的手机大部分是支持jpg的还是不支持的呢?

我用网上说的方法String encoding = System.getProperty("video.snapshot.encodings");
来获取支持的格式,但得到的也是null,手机就没这个键值。

ImageItem怎么不支持横向滚动(在我手机上连纵向滚动都不支持)?太不方便了,郁闷透顶。。。
kf156 2008-12-08
  • 打赏
  • 举报
回复
如果你确定文件及路径正确,那应该就是那手机不支持JPG了。
你说的ImageItem中图片过大通过方向键查看
我目前的思路是这样:
从大图中截图合适大小生成ImageItem
按方向键后,再根据具体按键重新截取图片相应的位置赋给ImageItem
不过感觉比较麻烦就是了。不知道有没人有比较好的方法

或者用替代方案:
显示个可以完整查看的缩略图,点击后用Canvas生成原比例的大图查看。
brant_yan 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 littlepboy 的回复:]
1、我直接在初始化时Image.createImage("/DefaultPicture.jpg"),也直接报null异常,
晕啊,不会我的多普达不支持jpg吧?。。。
[/Quote]
你确认了多普达上面的JVM支持JPG了??
littlepboy 2008-12-08
  • 打赏
  • 举报
回复
1、我直接在初始化时Image.createImage("/DefaultPicture.jpg"),也直接报null异常,
晕啊,不会我的多普达不支持jpg吧?。。。
2、有提示资费问题,流应当没问题,因为换成png就能正常下载并显示了。
3、必须用canvas实现么?那又要改很多代码了。。。
kf156 2008-12-08
  • 打赏
  • 举报
回复
1.支不支持JPG,最简单的方法就是放个JPG格式的图片在资源里,看能不能正常读取显示就行了
2.你确认你读到的流是正确的,即真机上是否有判断并过滤资费页面
3.高级界面的处理是系统的事了,想实现用Canvas吧 (ImageItem要实现也是可以的,但我的思路复杂了些,暂先不说了)
littlepboy 2008-12-08
  • 打赏
  • 举报
回复
现在的问题总结一下可能多了几个:
1、我的手机是否支持创建jpg图片?(应该支持的吧,多普达的手机,我还拿jpg图片做桌面呢)
2、如果支持jpg,那是不是createImage(InputStream stream)的问题?为何会出问题?
如果先把数据都读出来,再创建是不是可以解决?(还没尝试,先问问有没有可能)
3、图片超过屏幕尺寸,如何能够通过按上下左右键来移动图片呢?
我的手机显示png的时候直接把大于屏幕之外的部分全部裁剪了,我用ImageItem显示的。
littlepboy 2008-12-08
  • 打赏
  • 举报
回复
ls各位解析都很到位,先谢谢了。

我重新跟踪了一下问题,发现问题有些变化。
png图片超过手机屏幕也能显示出来,jpg图片不管多小也显示不出来。
我原来一直在试jpg的大图片,以为是大图片导致的问题,现在看来是图片格式的问题。
那我该怎么办?
我的手机是多普达的Windows Mobile。
restartrr 2008-12-08
  • 打赏
  • 举报
回复
先定位问题吧

图片格式
真机型号
yanhan0615 2008-12-08
  • 打赏
  • 举报
回复
你这样,先用吧数据全部读到内存中来,再创建图片,
使用createImage(InputStream stream)来创建,当InputStream 不稳定的时候我总觉得可能会有问题
kf156 2008-12-08
  • 打赏
  • 举报
回复
同意楼上的。
先把问题原因定位好
模拟器上可以,真机上不行
可能的原因有:
1.像你说的,某些手机可能不支持过大的图片
2.手机不支持该图片格式
3.得到的图片数据有问题
4.加载时内存爆了

littlepboy 2008-12-08
  • 打赏
  • 举报
回复
已经确定是创建图片时抛的异常,异常信息为:null。可能我上面说的不清楚。
yanhan0615 2008-12-08
  • 打赏
  • 举报
回复
你先确定是创建图片的问题还是网络传输的问题,或者是内存问题

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧