在MFC下使用Cximage报错

yzt_cv 2018-05-10 05:02:42
我想在MFC项目里使用Cximage库,因为Cximage在我自己这里编译不成功,我用的是CSDN上别人已经编译通过的lib,包含目录,库目录,依赖项都按照教程上的做法添加了,静态调用和动态调用都会出现错误,不知道有人遇到过一样的问题吗?是我有哪步做的不对了吗?

下面的代码是我用的测试代码
void CATCDialog::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);

// TODO: 在此添加控件通知处理程序代码
CxImage image;
image.Load(_T("baboon.jpg"), CXIMAGE_SUPPORT_JPG);

if (image.IsValid())
{
//image.GrayScale();
CDC *pDC = GetDC();
image.Draw(pDC->GetSafeHdc(), CRect(0, 0, 200, 200));

pDC->DeleteDC();
image.Save(_T("test.jpg"), CXIMAGE_SUPPORT_JPG);
}

UpdateData(FALSE);
}


报错显示
错误	LNK1120	10 个无法解析的外部命令	ATC	C:\Users\tzy\Desktop\ATC\Debug\ATC.exe	1	
错误 LNK2001 无法解析的外部符号 __imp__fprintf ATC C:\Users\tzy\Desktop\ATC\ATC\Tiff.lib(tif_ojpeg.obj) 1
错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: struct std::_Iterator_base12 * * __thiscall std::_Container_base12::_Getpfirst(void)const " (__imp_?_Getpfirst@_Container_base12@std@@QBEPAPAU_Iterator_base12@2@XZ),该符号在函数 "protected: void __thiscall std::deque<struct tagPOINT,class std::allocator<struct tagPOINT> >::_Orphan_off(unsigned int)const " (?_Orphan_off@?$deque@UtagPOINT@@V?$allocator@UtagPOINT@@@std@@@std@@IBEXI@Z) 中被引用 ATC C:\Users\tzy\Desktop\ATC\ATC\cximage.lib(ximadsp.obj) 1



...全文
761 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzt_cv 2018-05-11
  • 打赏
  • 举报
回复
引用 8 楼 zgl7903 的回复:
CImage` provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats.
好的,谢谢,我试一下
zgl7903 2018-05-11
  • 打赏
  • 举报
回复
CImage` provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats.
yzt_cv 2018-05-11
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
VS中 有封装了部分功能功能的 CImage 类
我需要用到gif,我记得CImage只支持png?
JamesWu9527 2018-05-11
  • 打赏
  • 举报
回复
引用 2 楼 yzt_cv 的回复:
[quote=引用 1 楼 Wuzm_ 的回复:] 你仔细检查下 属性配置有没有问题 包括: 【C/C++】->【常规】->【附加包含目录】; 【链接器】->【常规】->【附加库目录】; 【链接器】->【输入】->【附加依赖项】; 看这些都设置好没,如果都不行 把lib文件放包含在工程的路径下 尝试下 手动导入 #pragma comment(lib,"..\\xxx\\xxx.lib")
我已经在把工程文件里了,在stdafx.h中加了也这些语句了,还是会报错,我现在觉得难道是我的lib有问题? #pragma comment(lib,"cximage.lib") #pragma comment(lib,"jasper.lib") #pragma comment(lib,"jbig.lib") #pragma comment(lib,"Jpeg.lib") #pragma comment(lib,"libdcr.lib") #pragma comment(lib,"libpsd.lib") #pragma comment(lib,"mng.lib") #pragma comment(lib,"png.lib") #pragma comment(lib,"Tiff.lib") #pragma comment(lib,"zlib.lib") [/quote] 看你的用例 你应该是想在图像上绘制东西 然后再输出图片吧 单从功能上来看 你可以用下面的方法来处理图片,如果你想学习Cximage库,那你得找找资料,我也不是很清楚 使用GDI+ 的方法可以实现 配置:在【链接器】->【输入】->【附加依赖项】添加 gdiplus.lib 然后进行初始化

//使用GDI+
#include <gdiplus.h>
using namespace Gdiplus;

//保存GDI+被初始化后在应用程序中的GDI+标识
static ULONG_PTR m_gdiplusToken;
在构造函数中进行初始化操作

//对GDI+进行初始化
Gdiplus::GdiplusStartupInput gdiInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiInput, NULL);
处理部分 (这里是在图片上绘制文字)

//对生成的BItmap进行绘图处理 加上对应的文本信息 begin
	Gdiplus::Image image(L"D:\\test\\PDF_417_out.bmp");	//加载图片
	//Gdiplus::Graphics imageGraphics(&(*bitmap));
	imageGraphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
	//wstring strWrite = L"test"; strSource
    wstring strSource = L"test";
	Gdiplus::FontFamily font(L"楷体");// Gdiplus::FontStyleRegular,
	Gdiplus::Font myFont(&font, 10, Gdiplus::FontStyleRegular, Gdiplus::UnitPixel);
	SolidBrush blackBrush(Color(255, 0, 0, 0));	//半透明加文字颜色
	Gdiplus::PointF school_site((REAL)60, (REAL)60);//文字放置的像素坐标
	StringFormat format001;
	format001.SetAlignment(StringAlignmentNear);
	const WCHAR *temp = strSource.c_str();
	imageGraphics.DrawString(temp, strSource.length(), &myFont, school_site, &format001, &blackBrush);
	//对生成的Bitmap进行绘图处理 加上对应的文本信息 end
zgl7903 2018-05-11
  • 打赏
  • 举报
回复
VS中 有封装了部分功能功能的 CImage 类
yzt_cv 2018-05-10
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
CxImage 用 GDI+ , 你 直接 用 GDI+ 吧
GDI+和CxImage功能一样的吗?配置麻烦吗?
schlafenhamster 2018-05-10
  • 打赏
  • 举报
回复
CxImage 用 GDI+ , 你 直接 用 GDI+ 吧
yzt_cv 2018-05-10
  • 打赏
  • 举报
回复
引用 1 楼 Wuzm_ 的回复:
你仔细检查下 属性配置有没有问题 包括: 【C/C++】->【常规】->【附加包含目录】; 【链接器】->【常规】->【附加库目录】; 【链接器】->【输入】->【附加依赖项】; 看这些都设置好没,如果都不行 把lib文件放包含在工程的路径下 尝试下 手动导入 #pragma comment(lib,"..\\xxx\\xxx.lib")
我已经在把工程文件里了,在stdafx.h中加了也这些语句了,还是会报错,我现在觉得难道是我的lib有问题? #pragma comment(lib,"cximage.lib") #pragma comment(lib,"jasper.lib") #pragma comment(lib,"jbig.lib") #pragma comment(lib,"Jpeg.lib") #pragma comment(lib,"libdcr.lib") #pragma comment(lib,"libpsd.lib") #pragma comment(lib,"mng.lib") #pragma comment(lib,"png.lib") #pragma comment(lib,"Tiff.lib") #pragma comment(lib,"zlib.lib")
JamesWu9527 2018-05-10
  • 打赏
  • 举报
回复
你仔细检查下 属性配置有没有问题 包括:
【C/C++】->【常规】->【附加包含目录】;
【链接器】->【常规】->【附加库目录】;
【链接器】->【输入】->【附加依赖项】;
看这些都设置好没,如果都不行 把lib文件放包含在工程的路径下
尝试下 手动导入 #pragma comment(lib,"..\\xxx\\xxx.lib")

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧