CxImage

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的方式做:

        //兼容DC
	CDC 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的很多功能(图片变形、格式转化、过滤。。。)都没有用到,不过以后一定会有机会的~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS开发攻城狮的集散地

水波进度、加载动画、文字进度

1383
来自专栏Android 技术栈

Toolbar去除标题与返回键间的间距

标题和左侧的返回键间距过大,之前在做CloudReader的时候就遇到了,一直没有解决,由于自身强迫症,心里始终和这个过不去,就研究了很久终于解决了。

431
来自专栏漏斗社区

CTF|玩转RSA加密算法(一)

RSA是一种非对称加密算法,它由 公钥(n/e),私钥(n/d),明文M和密文C组成。我们做CTF题目时,一般题目中会给出公钥和密文让我们推出对应的私钥或者明文...

3969
来自专栏简书专栏

Python数据持久化-csv、excel篇

2018年7月4日笔记 学习目标: 1.会使用Python第三方模块操作CSV文件 2.会使用Python第三方模块操作EXCEL文件

532
来自专栏coder修行路

Python爬虫从入门到放弃(十)之 关于深度优先和广度优先

网站的树结构 深度优先算法和实现 广度优先算法和实现 网站的树结构 通过伯乐在线网站为例子: ? 并且我们通过访问伯乐在线也是可以发现,我们从任何一个子页面其实...

2248
来自专栏机器人网

ABB机器人编程技巧

第二:创建一个矩形体,举例400*200*10,并右击修改-图形显示,基本文理导入图片

964
来自专栏为数不多的Android技巧

ASCII Art:使用纯文本流程图

我们使用纯文本写代码,有了Markdown又可以使用纯文本写文档,那么对于更直观的信息表达方式——图片,能不能使用纯文本描述呢?

802
来自专栏王肖的UT

使用FFmpeg处理音视频

本文主要是介绍如何使用ffmpeg命令行工具进行各式各样的音视频处理操作——缩放、裁剪、剪辑、旋转、格式转换,etc。。。学了本文,基本可以把格式工厂之类的音视...

7128
来自专栏张俊红

python在租房过程中的应用

总第84篇 01|背景介绍: 租房是再普遍不过的一件事情了,我们在租房过程中常考量的两个因素是出租房离公司的远近以及价格,而我们一般都会去链家上看相应的信息,但...

3276
来自专栏黑白安全

如何攻破加密算法

当应用加密算法时,有许多地方可能会出错。难点在于识别和分析程序员用来加密的方法,然后寻找其中的漏洞。漏洞的种类也很多,比如弱加密算法、弱密钥生成器、服务端漏洞和...

672

扫描关注云+社区