CxImage

来源:互联网 发布:大数据入门经典书籍 编辑:程序博客网 时间:2024/06/16 09:46

Hi,蜜蜡,又是我听歌宝听歌专员gongluck。

今天,继之前的GDI、GDI+两个实例之后,我有利用功能强大的CxImage做了个小小的图片查看器。CxImage可真是强大,简直可以让各种类型的图片被弄得死去活来。

工程下载地址:点击打开链接

运行效果如图:

从网上下载好CxImage工程的源码并编译好后,把cximage文件夹下的所有头文件和工程的所有静态链接库文件(.lib)拷贝到自己的工程目录。

在代码中加入:

#include "ximage.h"#pragma comment(lib, "png.lib")#pragma comment(lib, "libdcr.lib")#pragma comment(lib, "jpeg.lib")#pragma comment(lib, "zlib.lib")#pragma comment(lib, "tiff.lib")#pragma comment(lib, "jasper.lib")#pragma comment(lib, "cximage.lib")#pragma comment(lib, "mng.lib")#pragma comment(lib, "libpsd.lib")

准备工作做完之后就可以使用CxImage了。

CxImage画图的话用Draw成员函数就可以了,该函数的第一个参数是HDC,接着的参数就是绘图区域相关的。但我用的时候发现

用CXimag的draw画图,图像可以超出HDC的范围?

image.Draw(GetDlgItem(IDC_CXIMAGE)->GetDC()->GetSafeHdc(),X,Y);

当X、Y有一个为负数时,图片都可以超出控件本身的范围绘图,百思不得其解。

所以最后我使用GDI加CxImage的方式做:

        //兼容DCCDC cmpdc;cmpdc.CreateCompatibleDC(GetDlgItem(IDC_CXIMAGE)->GetDC());int save = SaveDC(cmpdc.m_hDC);CRect rect;GetDlgItem(IDC_CXIMAGE)->GetWindowRect(rect);//兼容位图HBITMAP hbmp = CreateCompatibleBitmap(GetDlgItem(IDC_CXIMAGE)->GetDC()->m_hDC,rect.Width()-5,rect.Height()-2);cmpdc.SelectObject(hbmp);cmpdc.BitBlt(0,0,rect.Width(),rect.Height(),NULL,0,0,WHITENESS);    //白色背景CString path;GetDlgItemText(IDC_EDIT1,path);//CxImage***************************************************CxImage image;image.Load(path.GetBuffer(),CXIMAGE_FORMAT_UNKNOWN);if (image.IsValid()){image.Draw(cmpdc.m_hDC,X,Y);  }GetDlgItem(IDC_CXIMAGE)->GetDC()->BitBlt(0,0,rect.Width(),rect.Height(),&cmpdc,0,0,SRCCOPY);RestoreDC(cmpdc.m_hDC,save);DeleteObject(hbmp);DeleteDC(cmpdc);

当然,这里只是很简单的应用,CxImage的很多功能(图片变形、格式转化、过滤。。。)都没有用到,不过以后一定会有机会的~


1 0
原创粉丝点击