急!wince5.0下,怎么样实现对大尺寸jpg图片的显示?

mozheyuan 2006-07-22 11:22:26
想在wince5.0下做一个类似照片浏览器的东东,能够实现对jpg图片的浏览,放大,缩小,以及缩略图等简单图片浏览功能。因为5.0下没有imgdecmp.dll,所以用的是ce自带的IImage接口。但发现最多只能显示1.5M左右大小的jpg图片,不能满足需要。查了一下以前的帖子,可能是因为wince每个进程内存的限制。有人提出将大图切割分块实现,不知道这样可不可行(或者有没有更简单的方法或接口)?不知道哪位牛人以前实现过类似的东东,可否指点一下?
...全文
1804 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
mozheyuan 2006-08-12
  • 打赏
  • 举报
回复
问题解决了,感谢各位的热心回复,特别感谢无聊客、iLookee()。
rzsheng 2006-08-09
  • 打赏
  • 举报
回复
我也遇到这个问题,请问你解决了吗
iLookee 2006-08-09
  • 打赏
  • 举报
回复
奇怪了,再试的时候getthumbnail也是可以的
iLookee 2006-08-09
  • 打赏
  • 举报
回复
我试了两种办法,getthumbnail的方法是行不通的,
用下面这种办法可以显示出缩小后的图片来:
IBitmapImage* pBitmap;
pImgFactory->CreateImageFromFile(strFileName, &pImage);
pImgFactory->CreateBitmapFromImage(pImage, width, height, PixelFormat24bppRGB, InterpolationHintDefault, &pBitmap); // width和height就是缩小后的尺寸
pBitmap->QueryInterface(IID_IImage, (void **)&pImage);
pImage->Draw...

我用5M的图片试过,
sh_liyu98 2006-08-01
  • 打赏
  • 举报
回复
位图太大了系统业不能创建呀
在WINDOWS下面也是形不通的呀
iLookee 2006-07-27
  • 打赏
  • 举报
回复
我装了这个升级包,好像还是没有imgdecmp.dll
iLookee 2006-07-27
  • 打赏
  • 举报
回复
建议试一下 GetThumbnail 感觉这个用了局部解码,显示缩略图的时候应该有用,不过要完整显示大图片的时候就没用了
x0554 2006-07-27
  • 打赏
  • 举报
回复
http://www.microsoft.com/downloads/details.aspx?familyid=6c69461e-89fa-40b0-8953-b4cc1adbc8d8&displaylang=en
iLookee 2006-07-27
  • 打赏
  • 举报
回复
关注一下,我也在做这个
mozheyuan 2006-07-27
  • 打赏
  • 举报
回复
怎么升级?
无聊客 2006-07-26
  • 打赏
  • 举报
回复
我实验过IImage,也是几千X几千的图,内存消耗很小
navi_dx 2006-07-26
  • 打赏
  • 举报
回复
要是大的BMP倒是可以分行读取,分别画,消耗不了太多内存,大JPG就比较麻烦了
mozheyuan 2006-07-26
  • 打赏
  • 举报
回复
to navi_dx() :
我是要做一个类似照片浏览的功能,人为切割肯定行不通。
navi_dx 2006-07-26
  • 打赏
  • 举报
回复
你要是觉得JPG太大可以在PC上用工具人为切成几个大小一致的矩形小图片,比如切成8*8,就有64块,对每一块建立索引,画的时候做一个投影映射就行了,对于数据画一块读一块,画完了一块就释放它的空间,防止刷新就画在内存DC上面,画完了Bitblt一下,你还可以小图片和索引信息放在一个文件里管理。
自己Decode Jpeg的意义也不是很大,基本上也是要解成对应大小的DIB
x0554 2006-07-26
  • 打赏
  • 举报
回复
升级后就有imgdecmp.dll了
mozheyuan 2006-07-26
  • 打赏
  • 举报
回复
to yzx0023(无聊客):
是用上面的代码测试的吗?我是在64M模拟器上测试的,跑不了。Draw()的时候就出错了??
yajyjy 2006-07-25
  • 打赏
  • 举报
回复
内存是有限制,但是可以通过createfilemap映射内存,需要用多大内存都没有问题的
具体的再网上查查吧,如果没有找到给我发消息...
曾经的董胖 2006-07-25
  • 打赏
  • 举报
回复
呵呵! 楼主, 你只能自己写代码decode了, 你只经想调用系统的东东, 系统就会给你一次性解析完, 这样你就至少得要付出这么多内存.
不过就是自己写也不会太大动手笔的, 现在关于JPEG的Decode都是标准的东东, 你可以去Download一个lib, 一样支持的格式很多的.
mozheyuan 2006-07-25
  • 打赏
  • 举报
回复
to yzx0023(无聊客) :
不行,试过了。上面代码要修改两个地方:
1.int nHeight = ::GetSystemMetrics(SM_CYSCREEN);
2.pImage->Draw(dcBitmap.GetSafeHdc(), CRect(0, 0, nWidth , nHeight), CRect(0, 0, nWidth , nHeight));

srcRect
[in] An optional pointer to a RECT that specifies, in 0.01mm units, the portion of the image to be drawn in dstRect.
To display the entire image, set this value to NULL.


无聊客 2006-07-25
  • 打赏
  • 举报
回复
随便写了下,大致如下,不知道能不能跑,反正大致意思就是只取能显示的部分,多余部分不用管了

int nWidth = ::GetSystemMetrics(SM_CXSCREEN);
int nHeight = ::GetSystemMetrics(SM_CXSCREEN);
CWindowDC dc(0);
CDC dcBitmap;
dcBitmap.CreateCompatibleDC(&dc);
hResult = CreateCompatibleBitmap(dc.GetSafeHdc(), nWidth , nHeight);
if (hResult) {
HGDIOBJ hOldBitmap = dcBitmap.SelectObject(hResult);
pImage->Draw(dcBitmap.GetSafeHdc(), CRect(0, 0, nWidth , nHeight), CRect(0, 0, nWidth , nHeight));
dcBitmap.SelectObject(hOldBitmap);
}
加载更多回复(5)

19,502

社区成员

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

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