当前位置:   article > 正文

捉虫记录:图像bug杂记25-26日_gdipulspuls::bitmap::fromfile

gdipulspuls::bitmap::fromfile


BUG 1:GDI+ Image::FromFile 无效,调用图像指针始终为NULL

  1. m_pImg = Gdiplus::Bitmap::FromFile(m_imgFilePath);
  2. m_pImg为NULL

原因是没有初始化GDI+。
Solution:
1、声明两个全局变量: 
  1. GdiplusStartupInput m_Gdistart;
  2. ULONG_PTR m_GdiplusToken;

2、在其初始化函数InitInstance()中添加: 
GdiplusStartup(&m_GdiplusToken,& m_Gdistart,NULL); 
 
3、在需要调用 GDI+中的函数的页面上方 或者 在头文件 stdafx.h 中添加: 
  1. #include "gdiplus.h"
  2. using namespace Gdiplus;


BUG2:GDI+  new Bitmap不能接受三个参数
  1. //创建目标Bitmap
  2. Bitmap *bmpDest = new Bitmap(destWidth, destHeight, m_pImg->GetPixelFormat());

原因是微软的 DEBUG_NEW  和 GDI+ 不匹配造成的。
Solution:将以下三行注释掉
  1. //#ifdef _DEBUG
  2. //#define new DEBUG_NEW
  3. //#endif





BUG3:BGR BGR BGR to RRRGGGBBB,转化出错,图片颜色不一样
见下图:


最后我将图片读入MATLAB分析,发现:

A1 转化后,B1原图,发现出现的是值的差别,最后定位如下:



BUG4:不同图像显示出错,如下所示:

正常结果


异常结果

遇到这个结果,我首先想到的是——是不是图片数据的方向搞错了,因为之前就是搞错了数据的存放方式,原本数据按列存放,结果我按行处理就出现的严重的变形,不过那样的图片结果基本看不出原来的任何图片形状。然后,我就想到了另一个问题,也就是不久前刚碰到的一个问题,即在我在一张扩展边缘后的图片上截取原始图片大小的时候,在偏移下标位置时,不小心少算了一个像素,结果就造成了如上图般类似的结果。但是,这应该不会是这个问题,因为不是每张图片都出现这样的问题。
那么,我接着就想,会不会是因为图片高宽的影响,程序适用于height大于width的情况,实验如下:

很不幸,不是这样子的原因。
~~~~~~~~接着~~~我试了如下可能:
(1)是否是图片像素格式不一样,程序里面貌似是图片貌似适用于24位,可能图片是32位;
(2)是否是图片大小的问题。

最后发现,原来是因为图片的长宽的奇数问题——程序写的不够鲁棒。



本文地址:http://blog.csdn.net/linj_m/article/details/34414289
更多资源 请关注 博客:LinJM-机器视觉  微博:林建民-机器视觉



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/820084
推荐阅读
相关标签
  

闽ICP备14008679号