cximage开源软件应用

本文介绍了如何在Visual Studio 2010中集成并使用CXImage库进行图像处理,包括库文件的导入、编译配置及示例代码。演示了图片加载、缩放、拼接等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搞个 cximage702_full导入VS2010编译后

1.把所有.lib文件和.dll文件拷贝到 新项目的CXIMAGE文件夹里

2.在新项目的stdfx.h或所需要的文件里输入以下引用

#include "CXIMAGE/ximage.h"   
//#pragma comment(lib, "CXIMAGE/cximaged.lib")
//#pragma comment(lib, "CXIMAGE/cximagecrtd.lib")//在静态链接库中使用
#pragma comment(lib, "CXIMAGE/cximage.lib")
#pragma comment(lib, "CXIMAGE/png.lib")
#pragma comment(lib, "CXIMAGE/jpeg.lib")
#pragma comment(lib, "CXIMAGE/zlib.lib")
#pragma comment(lib, "CXIMAGE/tiff.lib")
#pragma comment(lib, "CXIMAGE/jbig.lib")
#pragma comment(lib, "CXIMAGE/jasper.lib")
#pragma comment(lib, "CXIMAGE/mng.lib")
#pragma comment(lib, "CXIMAGE/libdcr.lib")
#pragma comment(lib, "CXIMAGE/libpsd.lib")


3.如果用静态链接库编译或者生成带界面的MFCDLL 运行模式需要"release",

在引用时将MFCDLL生成的DLL和CXIMAGE/cximagecrtd.dll,CXIMAGE/cximaged.dll拷贝到目标工程目录中,

typedef void (*lpFun)(void);         
HINSTANCE hDll;   //DLL句柄  
lpFun pShowDlg; 
hDll = LoadLibrary(L"RegularDLL.dll");
if (NULL==hDll)
{
return ;

pShowDlg = (lpFun)GetProcAddress(hDll,"ShowDlg");
if (NULL==pShowDlg)
{
return ;
}
pShowDlg(); 
FreeLibrary(hDll);

4.测试代码

CxImage image;  
CRect m_rect;
HBITMAP m_bitmap;
#define xishu 0.8


void CkkkDlg::OnBnClickedOk()
{
GetWindowRect(&m_rect);//GetWindowRect(&m_rect); //获得控件客户窗口大小 
image.Load(L"test00111.jpeg", CXIMAGE_FORMAT_JPG); 
if (image.IsValid()) 

//if (m_bitmap) DeleteObject(m_bitmap); 
image.Resample(m_rect.Width()*xishu, m_rect.Height()*xishu); //按照Picture控件的大小,(不按比例)缩放原始图片 
m_bitmap = image.MakeBitmap(m_picture.GetDC()->m_hDC); 
m_picture.SetBitmap(m_bitmap); 
//HBITMAP OldBitmap = m_picture.SetBitmap(m_bitmap); 
//if (OldBitmap) DeleteObject(OldBitmap);  

}

void CkkkDlg::OnBnClickedButton2()//jpeg图片拼接
{
CxImage t_img1,t_img2,t_img3;


int t_h1,t_w1,t_h2,t_w2,t_h3,t_w3,t_bpp;


t_img1.Load(L"test00222.jpeg");


t_img2.Load(L"test00111.jpeg");


t_h1=t_img1.GetHeight();


t_w1=t_img1.GetWidth();


t_h2=t_img2.GetHeight();


t_w2=t_img2.GetWidth();


t_h3=t_h1;


t_w3=t_w1+t_w2;


t_bpp=t_img1.GetBpp();


t_img3.Create(t_w3,t_h3,t_bpp);


t_img3.MixFrom(t_img1,0,0);


t_img3.MixFrom(t_img2,t_w1,0);


t_img3.Save(L"3.jpeg",CXIMAGE_FORMAT_JPG);
}


void  CkkkDlg::zoom(float zoom)
{
int left = m_rect.Width()*xishu*zoom-m_rect.Width()*xishu;
int top = m_rect.Height()*xishu*zoom-m_rect.Height()*xishu;


HDC hdc = m_picture.GetDC()->m_hDC; 
SetStretchBltMode(m_picture.GetDC()->m_hDC,HALFTONE);   
SetStretchBltMode(hdc,HALFTONE);   
StretchBlt(hdc,0,0,m_rect.Width()*xishu,m_rect.Height()*xishu,m_picture.GetDC()->m_hDC,left,top,m_rect.Width()*xishu-2*left, m_rect.Height()*xishu-2*top,SRCCOPY);
////必须是缩放啊
}
void CkkkDlg::OnBnClickedButton1()//缩小

zoom(1.1);

void CkkkDlg::OnBnClickedButton3()//放大
{
zoom(0.9); 
}
 
void CkkkDlg::dbclick() //双击鼠标点为中心zoomin
{
CRect rectL,rectR;
CPoint point; 
GetCursorPos( &point ); 
GetDlgItem(IDC_STATIC2)->GetWindowRect(&rectL);//获取控件相对于屏幕的位置


if(rectL.PtInRect(point)) 

/*CString strPos; 
strPos.Format(L"%d:%d", point.x, point.y); 
AfxMessageBox(strPos);*/


//ScreenToClient(rectL);//转化为对话框上的相对位置
int rx,rwith,ry,rheight,halfWith,halfHeight;
halfWith = rectL.right-rectL.left;
halfHeight = rectL.bottom-rectL.top;
/*if(point.x < (rectL.right-rectL.left)/2)
{
rx = rectL.left;
rwith = (point.x-rectL.left)*2; 
}
else
{
rx = rectL.right - (rectL.right-point.x)*2;
rwith = (rectL.right-point.x)*2; 
}
if(point.y < (rectL.bottom-rectL.top)/2)
{
ry = rectL.top;
rheight = (point.y-rectL.top)*2;
}
else{
ry = rectL.bottom - (rectL.bottom-point.y)*2;
rheight = (rectL.bottom-point.y)*2;
}*/
if(point.x < (rectL.right-rectL.left)/2+rectL.left)
{
rx = 0;
rwith = m_rect.Width()*xishu-(halfWith-(point.x-rectL.left)*2); 
}
else
{
rx = halfWith-(rectL.right-point.x)*2;
rwith = m_rect.Width()*xishu-(halfWith-(rectL.right-point.x)*2); 
}
if(point.y < (rectL.bottom-rectL.top)/2+rectL.top)

ry = 0;
rheight = m_rect.Height()*xishu-(halfHeight-(point.y-rectL.top)*2);
}
else{
ry = halfHeight-(rectL.bottom-point.y)*2;
rheight = m_rect.Height()*xishu-(halfHeight-(rectL.bottom-point.y)*2);
}
HDC hdc = m_picture.GetDC()->m_hDC; 
SetStretchBltMode(m_picture.GetDC()->m_hDC,HALFTONE);   
SetStretchBltMode(hdc,HALFTONE);   
StretchBlt(hdc,0,0,m_rect.Width()*xishu,m_rect.Height()*xishu,m_picture.GetDC()->m_hDC,rx,ry,rwith, rheight,SRCCOPY);


 

 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值