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

相关文章

来自专栏雨过天晴

控制台输出颜色控制(Console

前端时间,写了一篇 PHP 在 Console 模式下的进度显示 ,正好最近的一个数据合并项目需要用到控制台颜色输出,所以就把相关的信息整理下,写到OSC的博客...

2981
来自专栏一“技”之长

Bootstrap响应式前端框架笔记七——下拉菜单

    在Bootstrap的Css框架中,下拉菜单属于组件。一个完整的下拉菜单应该有两部分组成,一个触发按钮与一个选项列表。触发按钮dropdown-togg...

540
来自专栏算法channel

Python-GUI|Tk类,属性文档使用指南

这是一篇tkinter相关API的介绍性地帮助文档,包括常用的包,类结构图,属性取值等,可以作为一个工具文档,供大家查阅。 01Tk中的包 __main...

2877
来自专栏流媒体人生

基于S3C6410和ffmpeg的视频加速示例

754
来自专栏分享达人秀

自动完成文本框AutoCompleteTextView实现快速输入

上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用。 一、认识AutoCompleteTextV...

1687
来自专栏前端儿

前端神器之Sublime Text2/3简单明了使用总结

第一:也是最重要的,它占内存很小(就如同notepad++那般迅速打开,所以那款其实也不错~)。一般IDE比如WebStorm(它也是一款神器来着),Aptan...

802
来自专栏Google Dart

Flutter 构建完整应用手册-动画 顶

作为UI开发人员,我们经常需要在屏幕上显示和隐藏元素。 但是,在屏幕上或屏幕外快速弹出元素会让最终用户感到不安。 相反,我们可以使用不透明动画淡入淡出元素,以创...

842
来自专栏非著名程序员

一键清理应用数据或者清除应用缓存的方法

导语:最近在做一个一键清理应用缓存的功能,做着做着发现挺有意思,总结了两种方法,供大家参考。 ? 一种是退出应用时,清除应用里的缓存数据。这种方法跟在设置里的...

1959
来自专栏happyJared

IDEA快捷键拆解系列(十):Run篇

  以下是关于Run导航项及其每一子项的拆解介绍,其中,加粗部分的选项是博主认为比较重要的。

543
来自专栏编程思想之路

Android6.0源码分析之蓝牙显示接收到的文件

在蓝牙界面有个menu:显示接收到的文件。本文分析显示接收到的文件 chapter one---显示接收到的文件 /android/packages/app...

2016

扫码关注云+社区