求救。。使用CXIMAGE同时显示多幅图,内存耗尽

winlyf 2008-07-15 03:43:06
建立单文档。使用CXIMAGE库,在View中显示多幅图
每幅图均申请一个内存变量CXimage * image,使用CXIMAGE提供的load加载图片,然后显示,当显示到11张后,后面的都不加载了,查看内存,发现只有3M了。
请问,如何使用这个库,同时加载多幅图片,只占用少量内存??
...全文
348 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuiyan 2008-07-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 winlyf 的回复:]
不知道是不是我问的有问题。
要不这样说,我从服务器下载图片(图片过大,分成10份按顺序传给我),要求每下一张都要显示;
现在我做的是把每张图片都保存为一个文件,然后在显示,这样我每下载完一张图片就要刷新一下,屏幕就会闪烁一下,而且如果加载到10幅的时候 内存耗尽。不知道谁有解决办法?
不知道这样问会不会有问题?
[/Quote]

每下一张显示一次,显示完了呢?怎么不释放?不需要继续保持在内存中的。

显示刷新会闪是另外的问题。
winlyf 2008-07-19
  • 打赏
  • 举报
回复
图形其实也不是很大 ,服务器生成给我 最小的20K 最大的200K
11000000 2008-07-19
  • 打赏
  • 举报
回复

我看就只有尽量把图片做得足够小才行了。
lenux 2008-07-18
  • 打赏
  • 举报
回复
不能显示完马上释放,然后再显示一个?

同时显示那么多大图不管用什么技术都会死的
winlyf 2008-07-18
  • 打赏
  • 举报
回复
没有人做过类似的么?
winlyf 2008-07-18
  • 打赏
  • 举报
回复
不知道是不是我问的有问题。
要不这样说,我从服务器下载图片(图片过大,分成10份按顺序传给我),要求每下一张都要显示;
现在我做的是把每张图片都保存为一个文件,然后在显示,这样我每下载完一张图片就要刷新一下,屏幕就会闪烁一下,而且如果加载到10幅的时候 内存耗尽。不知道谁有解决办法?
不知道这样问会不会有问题?
shuiyan 2008-07-17
  • 打赏
  • 举报
回复
离屏?没听过。高手来讲解下。

双缓冲甚至多缓冲倒是可以考虑。

显示缩略图,再显示一张大图,关闭,再从缩略图中选择显示一张大图。这样就不会吃内存了,速度也可以保证,因为一次只需要显示一张大图。
winlyf 2008-07-17
  • 打赏
  • 举报
回复
在网上看到说使用离屏技术可以实现,不过没有看到这方面的基础知识,不知道谁有能给点入门介绍或者链接
winlyf 2008-07-17
  • 打赏
  • 举报
回复
只是效果像缩略图,但是还是要真正的显示。
这里我下载一幅地图,假设分成20个部分,按一定比例在当前屏幕上要显示出来10幅。
如果是加载10个文件的话 ,我这里内存肯定不够。
这里我想 先把这10个文件合成一个,然后在显示;在移动过程中再加载其他需要的图。
为了保证这里不闪烁,先要将显示的图存屏,然后在加载其他图。
lenux 2008-07-16
  • 打赏
  • 举报
回复
如果CXImage这个库里没有,你可以考虑ce自己提供的
IImage接口,它可以实现你的效果。

并提供了GetThumbnail的api
lenux 2008-07-16
  • 打赏
  • 举报
回复
架构做得好,才是外表后面的真谛。
winlyf 2008-07-16
  • 打赏
  • 举报
回复
仅缩略也难满足要求。
参考了下GOOGLE手机地图,感觉它那做得比较完美。
不知道有没有人知道GOOGLE手机地图显示原理?
winlyf 2008-07-15
  • 打赏
  • 举报
回复
想问下如何加载缩略图?CXImage这个库好像没有提供这个功能?是要引用别的库还是本身就有这用API函数?
shuiyan 2008-07-15
  • 打赏
  • 举报
回复
那就加载缩略图,别加载真正的图片。反正也不可能一下子将所有的图片在一屏显示的。当用户点某个缩略图时,再具体load哪个图片了。
feitianlee 2008-07-15
  • 打赏
  • 举报
回复
那应该LOAD PREVIEW信息.
winlyf 2008-07-15
  • 打赏
  • 举报
回复
我现在做的是一次性加载指定文件夹的所有JPG图片 就像在桌面缩略图一样
winlyf 2008-07-15
  • 打赏
  • 举报
回复
m_ViewImageAry.getat(i).pImage = load(m_ViewImageAry.getat(i).csPath,1);
shuiyan 2008-07-15
  • 打赏
  • 举报
回复
图像读到内存是,其实都是将其恢复成了BMP了,你在电脑上看看一幅BMP压缩成jpg后,两者相差有多大。
WINCE系统一般64MB内存,最多128MB吧。可不像Windows有硬盘做虚拟内存倒来倒去的。所以内存是很宝贵的资源。

最好不要一次性加载那么多,而是处理一个释放一个。
winlyf 2008-07-15
  • 打赏
  • 举报
回复
我是一起动就把所有的图都load进来
我这里这样做的
typedef struct tagJPGInfo {
CString csPath; //文件路径和名称
CxImage * pImage; //内存指针
tagTiffInfo() {
pImage = NULL;
}
} JPGTRUCT;

CArray <JPGTRUCT, JPGTRUCT> m_ViewImageAry;//个数和要显示的图片个数相等

load是CXimage这个库提供的接口 用来加载图片的内容
feitianlee 2008-07-15
  • 打赏
  • 举报
回复
一次只LOAD 一张,切换VIEW时再RELOAD好了. 图片很占内存的.
加载更多回复(3)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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