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 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2182
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6908
来自专栏魂祭心

原 canvas绘制clock

4144
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3165
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645
来自专栏菩提树下的杨过

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class B...

25310
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2576
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587

扫码关注云+社区