android 加载100M左右的图片

Sir_Soft 2012-04-16 04:17:35
现在正在做一个测绘的软件,需要加载100M-200M左右的区域图,遇到的问题就是如何能讲这么大的图片加载进去?
求高手,前提是不损失精度(像素)
...全文
498 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
niubolity 2012-07-12
  • 打赏
  • 举报
回复
楼主 搞定了不?
Gongqingshuai 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

额 比如你切成400块,你有图片名吧 比如0-399,你要有个虚拟的全局坐标吧,就是你想象中你在大图上的坐标,然后坐标跟图片有个对应关系,假如你的切片时1000*1000的,一开始你载入的是名字为0的图片,你的坐标走到800的时候 就提前把1000位置的图1给加载进来就行了。如果怕内存不够用,走过1000的时候把0再释放掉,大概就这么个意思。
[/Quote]
好像就是绘制游戏中地图的方式
Sir_Soft 2012-04-17
  • 打赏
  • 举报
回复
画是能画了 但是如何滑动屏幕那又如何计算该画哪一张图呢
sniffer12345 2012-04-16
  • 打赏
  • 举报
回复
用C加载,用libpng或者libjpeg,要不就直接用android系统的skia
kay_ 2012-04-16
  • 打赏
  • 举报
回复
你网上下个android应用开发解密的电子书,然后126页有图片绘制,所谓无缝贴出就是贴一块嘛,没那么复杂。
kay_ 2012-04-16
  • 打赏
  • 举报
回复
额drawbitmap 你有一个bitmap的链表,数组,向量都行, 存现在要画的图。 把链表的图画出来就行了。
链表根据你现在的坐标存放应该存放的图。

比如现在是初始化 链表里只有编号是0的图,你移动到800,800的时候(假设切片是1000*1000的),这时候你的链表里就是0,1,2,3。
具体到画的时候就是一个for循环 然后把这些图画出来就可以,再具体就是0的全局坐标是0,0,图1的全局坐标是0,1000;2的坐标是1000,0;3的坐标是1000,1000;然后你画的时候在全局坐标的基础上加个偏移,作为视窗坐标就可以了。
Sir_Soft 2012-04-16
  • 打赏
  • 举报
回复
嗯 求一个显示的方法,就是不知道如何实现同一屏幕显示多张图 而且无缝拼接的
kay_ 2012-04-16
  • 打赏
  • 举报
回复
如果你的切图大小 大于等于一屏 最多同时显示4张
Sir_Soft 2012-04-16
  • 打赏
  • 举报
回复
我每张图都是要参加计算的 比如屏幕的右边部分显示你所说的图0左半边,左半部分还要显示图1的右半边,这个存在一个问题就是屏幕同时显示多张图的问题?
kay_ 2012-04-16
  • 打赏
  • 举报
回复
额 比如你切成400块,你有图片名吧 比如0-399,你要有个虚拟的全局坐标吧,就是你想象中你在大图上的坐标,然后坐标跟图片有个对应关系,假如你的切片时1000*1000的,一开始你载入的是名字为0的图片,你的坐标走到800的时候 就提前把1000位置的图1给加载进来就行了。如果怕内存不够用,走过1000的时候把0再释放掉,大概就这么个意思。
Sir_Soft 2012-04-16
  • 打赏
  • 举报
回复
切片是在PS里面均匀切好 然后放在SD卡上的吧 关键是如何实现像谷歌地图那样平面加载多张图 而且无缝拼接起来的
Sir_Soft 2012-04-16
  • 打赏
  • 举报
回复
文件就是格式就是JPG 像素是20000*20000的 切片加载具体如何在一个VIEW里面加载多块啊?读要现实的额数据好像也要先加载完吧
kay_ 2012-04-16
  • 打赏
  • 举报
回复
顶楼上,我觉得第一种方法比较靠谱。
第二种方法你要读取文件屏幕要显示的数据,首先得先把一百M的文件载进来,然后每次读取的时候还要skip,而从java的源代码可以看出来
   public long skip(long n) throws IOException {

long remaining = n;
int nr;
if (skipBuffer == null)
skipBuffer = new byte[SKIP_BUFFER_SIZE];

byte[] localSkipBuffer = skipBuffer;

if (n <= 0) {
return 0;
}

while (remaining > 0) {
nr = read(localSkipBuffer, 0,
(int) Math.min(SKIP_BUFFER_SIZE, remaining));
if (nr < 0) {
break;
}
remaining -= nr;
}

skip方法并不是直接“跳到”你要读取的位置,还是要遍历。

第一种方法 楼主可以找或者自己写切分图片的工具,把大图切成多个2-4个屏幕大小的小图,就像楼上说的那样就行了。


AMinfo 2012-04-16
  • 打赏
  • 举报
回复
2个方法:
1、根据屏幕大小将这个图切成N多块,要加载时根据屏幕滑动加载,类似于目前常用的谷歌地图方式;
2、熟悉图片的文件格式,只从文件中读取当前屏幕要显示的数据。
Sir_Soft 2012-04-16
  • 打赏
  • 举报
回复
自己先顶一个

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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