源代码如下CFileDialog dlg(TRUE,NULL,L"支持各种图片",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
   L"JPEG(*.JPG,*.JPE),BMP(*.BMP,*.RLE),TIFF(*.TIF)|*.BMP;*.RLE;*.JPG;JPE;*.TIF;*.TIFF|BMP(*.BMP,*.RLE)|*.BMP;*.RLE|JPEG(*.JPG,*.JPE)|*.JPG;JPE|TIFF(*.TIF)|*.TIF;*.TIFF|*.*|");
int result = dlg.DoModal();
if( IDOK == result )
{
CString filename = dlg.GetFileName();
if(m_pTargetPic != NULL) delete m_pTargetPic;
m_pTargetPic =new Bitmap(filename);
         }
请问这样我的m_pTargetPic是怎样创建成功的? 我导入的是bmp 还有jpg的图片它都能成功创建,它是怎样获取图片信息的啊?  请教高手解答!!!

解决方案 »

  1.   

    前面的那么多代码都只是创建打开文件对话框而已,创建的代码只有一句
    m_pTargetPic =new Bitmap(filename);//filename是它打开的文件名
      

  2.   

    关键在这句:m_pTargetPic =new Bitmap(filename);这是调用了一个类的构造函数,类名是 Bitmap, 你看看你工程(估计是别人写的)里这个类的构造函数。
    代码你没贴出来。有多种读取图像的方法,一种是根据输入参数(比如文件名filename的后面三个字母,判断文件类型,然后分析其结构。。一种更简单的方法,是统一用IPicture控件(内置在windows里)。 你没给出 Bitmap源代码,无法知道你程序是如何读的。答对了给分哦。
      

  3.   

    GDI+完成了烦琐的文件格式识别和转换,
    如果有兴趣可以找这些都文件格式定义及编解码方式自己来处理
      

  4.   


    CFileDialog dlg(TRUE,NULL,L"支持各种图片",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
    L"JPEG(*.JPG,*.JPE),BMP(*.BMP,*.RLE),TIFF(*.TIF)|*.BMP;*.RLE;*.JPG;JPE;*.TIF;*.TIFF|BMP(*.BMP,*.RLE)|*.BMP;*.RLE|JPEG(*.JPG,*.JPE)|*.JPG;JPE|TIFF(*.TIF)|*.TIF;*.TIFF|*.*|");//CFileDialog初始化,支持扩展名,BMP,JPG,TIF等等,然后缩写也支持
    int result = dlg.DoModal();//简历对话框
    if( IDOK == result )//如果成功,则进入下面代码,失败则跳出
    {
    CString filename = dlg.GetFileName();//把刚才CFileDialog获得图片路径附值filename
    if(m_pTargetPic != NULL) delete m_pTargetPic;//判断m_pTargetPic 内容为空(为了填充)
    m_pTargetPic =new Bitmap(filename); //将刚才的filename路径的位图初始化导入m_pTargetPic 
      

  5.   

    m_pTargetPic =new Bitmap(filename);
    ========
    这里的创建的工作其实就是说由new Bitmap(filename)来完成的,至于内部是如何转化的,关键就在于Bitmap这个类的构造函数是如何处理的了。
      

  6.   

    3楼可以说得详细点吗?Bitmap是VS自带的,在gdiplusheaders.h中 ,小弟刚接触图像处理,对怎样从图片中读信息还不了解,谢谢了
      

  7.   


    Bitmap是VS自带的一个类,在gdiplusheaders.h 中。。请问从图片中读数据,对于BMP,JPG有什么不同吗?
      

  8.   


    getfilename知识获取文件名如01.bmp,没有路径啊
      

  9.   

    当然不同了,BMP文件与JPG文件的文件格式是完全不一样的。不过你不用考虑这个的,这个类已经在内部处理好了。
      

  10.   


    但是请问我只提供一个文件名如01.jpg,它就能完全构造出一个Bitmap对象,还包含相应的图像信息吗?
    谢谢解答
      

  11.   

    但是请问我只提供一个文件名如01.jpg,它就能完全构造出一个Bitmap对象,还包含相应的图像信息吗?
    谢谢解答
    =====================
    你提供了一个01.jpg这个文件名,这个类读这个文件,根据文件头来区分文件的类型,然后从文件中解析出数据,构造出Bitmap对象,你提供的虽然是文件名,但是在构造Bitmap对象时,它会读取这个文件中的内容。
      

  12.   

    getfilename知识获取文件名如01.bmp,没有路径啊
      

  13.   

    你的意思是GetFileName这个没有获取正确的文件路径吗?应该不会吧。
      

  14.   


    噢 就是等于说这个类最终还是要从01.jpg这个文件中读取数据,但是怎样读取,怎样构造出bitmap对象是完全由GDI实现的,可以这样理解吗?
      

  15.   


    CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c: est est1.txt 那个确实只得到文件名啊
      

  16.   

    查了下资料Bitmap是继承image的,可以用image中的一个参数为相对路径的构造函数来初始化,谢谢各位解答,小弟一次发帖。谢谢了
      

  17.   

    图像格式不同,(BMP 可以是压缩的,也可以不压缩,JPG一定是余弦压缩的),但可以用 IPICTURE控件统一读,系统内部去分辨。。楼主用的是 GDI+, 这个是库里有自己实现的分辨和分析,楼主不用多虑了。不管它。