*Bitmap 转换为 *Image

来源:互联网 发布:图像识别软件价格 编辑:程序博客网 时间:2024/05/21 07:46

   Bitmap 是Image的子类

   因此,Bitmap类指针可以转换为Image类指针

   下面的转换是没有问题的

   

   Bitmap bmp(souceRectf.Width,souceRectf.Height);   Image*pImg=(Image*)&bmp;


  但是,如果pImg是全局变量,也即pImg在上述函数体范围外继续使用时,便会出现错误。

  

  原因是:  bmp是局部变量,因此出了此函数作用范围后,便会被系统撤销,而这时如果再调用pImg便会出现读内存错误。

 

  那如何解决呢?如何才能使得出来函数范围后,变量还可继续使用?

  那当然是在堆上分配变量

 

 方法一: 直接NEW Bitmap

 

   Bitmap *pImg=new Bitmap(souceRectf.Width,souceRectf.Height);               Graphics graphics(pImg);   graphics.DrawImage(m_pImage,desRectf,souceRectf.X,souceRectf.Y,souceRectf.Width,souceRectf.Height,UnitPixel,NULL);   if (m_showImageDlg.pImg!=NULL)   {   delete m_showImageDlg.pImg;   }   m_showImageDlg.pImg=pImg;  //m_showImageDlg.pImg 是Image*类型   m_showImageDlg.Invalidate(FALSE);


 

方法二:调用GetThumbnailImage()函数

             

此函数在堆上分配缩略图空间,并返回空间地址(Image* 类型) 

   Bitmap bmp(souceRectf.Width,souceRectf.Height);   Graphics graphics(&bmp);   graphics.DrawImage(m_pImage,desRectf,souceRectf.X,souceRectf.Y,souceRectf.Width,souceRectf.Height,UnitPixel,NULL);   Image *pImg=bmp.GetThumbnailImage(souceRectf.Width,souceRectf.Height,NULL,NULL);  //  由Bitmap 转换为Image 的方法      if (m_showImageDlg.pImg!=NULL)   {   delete m_showImageDlg.pImg;   }   m_showImageDlg.pImg=pImg;      //m_showImageDlg.pImg 是Image*类型   m_showImageDlg.Invalidate(FALSE);