FreeImage_Load函数一直加载不出来图片

诚实可爱的小郎君 2017-08-03 03:36:01
使用下面的代码加载图片,到了红色部分就一直不能正确的加载出图片信息,有没有大佬知道怎么改
我试过将ImageName去掉直接在函数里面const char *Name = "123.jpg";这样就可以加载出来了,不知道是什么原因
我现在需要动态的获取图片的名字,所以并不能写死

BOOL MyImage::LoadMyImage(const char *ImageName)
{
FreeImage_Initialise(TRUE);

FREE_IMAGE_FORMAT ImageType = FIF_UNKNOWN;
if (FIBitMap != NULL)
{
FreeImage_Unload(FIBitMap);
}
// 获取图片格式
ImageType = FreeImage_GetFileType(ImageName);
if (ImageType == FIF_UNKNOWN)
{
ImageType = FreeImage_GetFIFFromFilename(ImageName);
}
if (ImageType != FIF_UNKNOWN && FreeImage_FIFSupportsReading(ImageType))
{
FIBitMap = FreeImage_Load(ImageType, ImageName, LR_LOADFROMFILE);
}
if (!FIBitMap){
MessageBox(NULL, TEXT("Fail to Load Image!"), NULL, NULL);
exit(-1);
}
...全文
839 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-04
  • 打赏
  • 举报
回复
初始化 FreeImage FreeImage 主要包含头文件FreeImage.h 、静态链接库FreeImage.lib 、FreeImaged.lib ,动态链接库FreeImage.dll 和FreeImaged.dll 。其中,以d 结尾的库文件用于调试版,其余用于发行版。为了在VC 中使用FreeImage方法如下: #i nclude"FreeImage.h" #ifdef _DEBUG #pragma comment(lib, "FreeImaged.lib") #else #pragma comment(lib, "FreeImage.lib") #endif 默认情况下,FreeImage 被当作动态链接库。若需用作静态链接库,则在应用程序类的InitInstance 中调用FreeImage_Initialise(0) 加载FreeImage 库,重载ExitInstance 并在其中调用FreeImage_DeInitialise() 释放FreeImage 库。 我猜你调用FreeImage_Load总得在初始化之后吧。
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
程序员的常识之一:不要将程序源代码或项目或exe放在桌面这种复杂(多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上)的目录下。
我换了地址也不可以
引用 4 楼 zgl7903 的回复:
是不是文件没有被正常关闭? FreeImage_Unload? http://blog.csdn.net/byxdaz/article/details/6056509
然后我在另一个工程里面测试过,直接将LoadMyImage里面的代码放在WM_PAINT里面然后将FileName使用const char *FileName = "xxx.xxx"; 的形式赋值,就可以成功的打开
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
是不是文件没有被正常关闭? FreeImage_Unload? http://blog.csdn.net/byxdaz/article/details/6056509
你发的那个网址我也看过,我下载的FreeImage没有FreeImaged.dll,我是在项目属性,vc++目录下面包含的,我这里Load都没有正确,后面FreeImage_Unload做与不做也没有什么关系吧?
赵4老师 2017-08-04
  • 打赏
  • 举报
回复
程序员的常识之一:不要将程序源代码或项目或exe放在桌面这种复杂(多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上)的目录下。
zgl7903 2017-08-04
  • 打赏
  • 举报
回复
是不是文件没有被正常关闭? FreeImage_Unload? http://blog.csdn.net/byxdaz/article/details/6056509
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
是不是图片路径问题? 使用完整路径试试看 如 "C:\\test.bmp"


我是用的打开文件的对话框获取到的图片路径,敲断点看了的,文件名没错,然后我刚刚成功打开过之后,现在也打不开了
zgl7903 2017-08-04
  • 打赏
  • 举报
回复
是不是图片路径问题? 使用完整路径试试看 如 "C:\\test.bmp"
  • 打赏
  • 举报
回复
我使用了一个方法就是将FileName的实参定义成string类型如下: string Name; ....... MyImag.:LoadMyImage(Name.c_str()); 这样就可以成功Load了
  • 打赏
  • 举报
回复
还有一个疑惑,就是我通过constr char *ImageName = "E:\\1.jpg"; FreeImage_Load(ImageType, ImageName, 0);这样就可以Load成功,但是通过函数的形参BOOL MyImage::LoadMyImage(const char *ImageName)传入的ImageName传递给FreeImage_Load的时候就加载不出来图片
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
初始化 FreeImage FreeImage 主要包含头文件FreeImage.h 、静态链接库FreeImage.lib 、FreeImaged.lib ,动态链接库FreeImage.dll 和FreeImaged.dll 。其中,以d 结尾的库文件用于调试版,其余用于发行版。为了在VC 中使用FreeImage方法如下: #i nclude"FreeImage.h" #ifdef _DEBUG #pragma comment(lib, "FreeImaged.lib") #else #pragma comment(lib, "FreeImage.lib") #endif 默认情况下,FreeImage 被当作动态链接库。若需用作静态链接库,则在应用程序类的InitInstance 中调用FreeImage_Initialise(0) 加载FreeImage 库,重载ExitInstance 并在其中调用FreeImage_DeInitialise() 释放FreeImage 库。 我猜你调用FreeImage_Load总得在初始化之后吧。
按照上面的理解来说是当做动态链接库的话,要使用FreeImaged.lib和FreeImaged.dll,我刚刚去官网下载重新编译了FreeImage库,生成了32位的FreeImaged.lib和FreeImaged.dll,添加进去之后再按照下面 #i nclude"FreeImage.h" #ifdef _DEBUG #pragma comment(lib, "FreeImaged.lib") #else #pragma comment(lib, "FreeImage.lib") #endif 引入,然后在Debug版本的时候是当做动态库使用的,那么就不需要使用FreeImage_Initialise(0) 和FreeImage_DeInitialise()了吧,但是这样在执行我最开始的那段代码时执行到FreeImage_Load的时候还是一直加载不成功
  • 打赏
  • 举报
回复
我在想是不是我的FreeImage库添加的有问题,但是如果是有问题的话那么里面的其他函数应该也是无法使用的才对

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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