以前一直想尝试类似于PS的图层管理,特别是让图层以一定的透明度混合显示的效果。当时觉得自己写太麻烦,就放弃了,现在既然有了CxImage,就很想尝试能否用CxImage来实现这个效果。在网上搜索,没见到相关的说明,最后折腾了好久,才自己尝试出来,现在写出来分享一下。
#include "stdafx.h"
//获取文件后缀名所需要的库
BOOL CCxImageMFCDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: 在此添加您专用的创建代码
//m_ximage是一个CxImage的对象
char drive[MAX_LENGTH],dir[MAX_LENGTH],fname[MAX_LENGTH],ext[MAX_LENGTH];
_splitpath(lpszPathName,drive,dir,fname,ext);
//网上很多获取后缀名是自己写的字符串处理,但是我还是觉得提供的库更好用
uint32_t uImgType= CxImage::GetTypeIdFromName(ext);
//CxImage通过后缀名获取类型
m_ximage.LayerCreate();
//首先要创建图层,在创建图层时就动态创建了一个CxImage,详情可见源代码
CxImage * pImageLayer=m_ximage.GetLayer(-1);
//-1代表获取最后一个图层,也就是最新获取的,这里获得指针
pImageLayer->Load(lpszPathName,uImgType);
//用这个图层打开图像
if (pImageLayer->IsValid(