使用FreeImage 出现了问题

yantings 2015-12-22 05:30:56
使用FreeImage这个库,加载图片,读取图片的宽,用图片的宽和宽的一半重新绘制一张图片。思路就是这样的。代码如下:

FIBITMAP src = new FIBITMAP();
if (!FreeImage.IsAvailable())
{
MessageBox.Show("FreeImage.dll seems to be missing. Aborting.");
return null;
}
if (!System.IO.File.Exists(fileName))
{

MessageBox.Show(fileName + " does not exist. Aborting.");
return null;
}
if (!src.IsNull)
FreeImage.Unload(src);
src = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, fileName, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
if (src.IsNull)
{
MessageBox.Show("Loading bitmap failed. Aborting.");
return null;
}

int bpp = (int)FreeImage.GetBPP(src);
int width = (int)FreeImage.GetWidth(src);
int height = (int)FreeImage.GetHeight(src);
int newheight = width / 2;

FIBITMAP dib = FreeImage.Allocate(width, newheight, bpp, FreeImage.FI_RGBA_RED_MASK,
FreeImage.FI_RGBA_GREEN_MASK, FreeImage.FI_RGBA_BLUE_MASK);
if (dib.IsNull)
{
FreeImage.Unload(src);
dib = FreeImage.Allocate(width, newheight, bpp, FreeImage.FI_RGBA_RED_MASK,
FreeImage.FI_RGBA_GREEN_MASK, FreeImage.FI_RGBA_BLUE_MASK);
src = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, fileName, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE);
}


然后就出现了两种情况:
1.src这个源图片会加载失败,值为0;
2.或者一开始src有值,但是dib为空,然后我就先卸载src再创建这个新图片,创建成功,但是再次加载src的时候会失败值是0的情况。
我以为是电脑空间不足,把所有运行的程序关掉之后,还是有这个问题。
百思不得其解,希望各位指点一下迷津~~~
...全文
582 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由蝶鸟 2017-10-24
  • 打赏
  • 举报
回复
请问楼主解决了吗,我也遇到同样的问题,图片太大就是不行
yantings 2015-12-23
  • 打赏
  • 举报
回复
FreeImage库是用C++写的,C#封装的~~嗯嗯~~我努力的去看下源码~~谢谢你~~
江南小鱼 2015-12-22
  • 打赏
  • 举报
回复
FreeImage库用什么语言写的,看看有源码不。你这种问题,只能分析这个库本身了。
yantings 2015-12-22
  • 打赏
  • 举报
回复
忘了 ,补充一下,加载的这张图片大小是10M,尺寸是16640*4704~~~

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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