CListCtrl控件无法显示大容量图片的缩略图问题
我有一张图片,容量是1.53G,宽和高分别是30080和18240。显示缩略图的代码是这样的
#define PICWIDTH 90 //缩略图的宽度
#define PICHEIGHT 90 //缩略图的高度
Bitmap bmp( wcstring );
sourceWidth = bmp.GetWidth();
sourceHeight = bmp.GetHeight();
destWidth = (sourceWidth < PICWIDTH) ? sourceWidth : PICWIDTH;
destHeight = (sourceHeight < PICHEIGHT) ? sourceHeight : PICHEIGHT;
//Bitmap 转换为 CBitmap
Bitmap* pThumbnail = (Bitmap*)bmp.GetThumbnailImage(destWidth, destHeight, NULL, NULL);
HBITMAP hBmp;
pThumbnail->GetHBITMAP(Color(255,255,255),&hBmp);
// 删除缩略图指针
delete pThumbnail;
利用利用断点调试,发现sourceWidth 和sourceHeight 的值都是0。我想主要是因为图片太大,超过GDI+的显示范围。
前一段时间,有些朋友让我把图片先压缩,再显示缩略图,问题是我的程序实现的功能就是压缩图片。
如果为了显示缩略图,把图片加进去的时候就进行压缩。会不会对我的程序功能有影响?有没有其他的简便方法,我只要求显示缩略图,不要求显示这张图片。
问题困扰了我很久,还请众位高手帮忙...
[解决办法]
直接从原始图像读取部分数据构成缩略图。
[解决办法]
这个帖子有非常详细的讨论:
http://topic.csdn.net/u/20070207/18/4cd5283a-3184-4a70-a4fe-c7fd8a55f5cf.html
你用普通的方法基本不可能完成!如果更大的基本的BMP JPEG基本都不能用了,你必需自己来定义数据的格式,或者分割放在几个文件,然后用自己的逻辑(CreateFileMapping)来读取需要的数据显示。