关于图片格式转换的问题

Tribbiani66 2010-10-10 09:36:49
源代码如下

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的图片它都能成功创建,它是怎样获取图片信息的啊? 请教高手解答!!!
...全文
122 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsch 2010-10-12
  • 打赏
  • 举报
回复
楼主解决了没?
gusto 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wltg2001 的回复:]
引用 8 楼 tribbiani66 的回复:
引用 2 楼 gusto 的回复:
关键在这句:m_pTargetPic =new Bitmap(filename);

这是调用了一个类的构造函数,类名是 Bitmap, 你看看你工程(估计是别人写的)里这个类的构造函数。
代码你没贴出来。

有多种读取图像的方法,一种是根据输入参数(比如文件名filename的后面三个字母,判断文件……
[/Quote]


图像格式不同,(BMP 可以是压缩的,也可以不压缩,JPG一定是余弦压缩的),但可以用 IPICTURE控件统一读,系统内部去分辨。。

楼主用的是 GDI+, 这个是库里有自己实现的分辨和分析,楼主不用多虑了。不管它。
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
查了下资料Bitmap是继承image的,可以用image中的一个参数为相对路径的构造函数来初始化,谢谢各位解答,小弟一次发帖。谢谢了
向立天 2010-10-11
  • 打赏
  • 举报
回复
实践出真知
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wltg2001 的回复:]
引用 13 楼 wangsch 的回复:
getfilename知识获取文件名如01.bmp,没有路径啊

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

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

那个确实只得到文件名啊
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wltg2001 的回复:]
但是请问我只提供一个文件名如01.jpg,它就能完全构造出一个Bitmap对象,还包含相应的图像信息吗?
谢谢解答
=====================
你提供了一个01.jpg这个文件名,这个类读这个文件,根据文件头来区分文件的类型,然后从文件中解析出数据,构造出Bitmap对象,你提供的虽然是文件名,但是在构造Bitmap对象时,它会读取这个文件中的内容。
[/Quote]

噢 就是等于说这个类最终还是要从01.jpg这个文件中读取数据,但是怎样读取,怎样构造出bitmap对象是完全由GDI实现的,可以这样理解吗?
wltg2001 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wangsch 的回复:]
getfilename知识获取文件名如01.bmp,没有路径啊
[/Quote]
你的意思是GetFileName这个没有获取正确的文件路径吗?应该不会吧。
wangsch 2010-10-11
  • 打赏
  • 举报
回复
getfilename知识获取文件名如01.bmp,没有路径啊
wltg2001 2010-10-11
  • 打赏
  • 举报
回复
但是请问我只提供一个文件名如01.jpg,它就能完全构造出一个Bitmap对象,还包含相应的图像信息吗?
谢谢解答
=====================
你提供了一个01.jpg这个文件名,这个类读这个文件,根据文件头来区分文件的类型,然后从文件中解析出数据,构造出Bitmap对象,你提供的虽然是文件名,但是在构造Bitmap对象时,它会读取这个文件中的内容。
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wltg2001 的回复:]
引用 8 楼 tribbiani66 的回复:
引用 2 楼 gusto 的回复:
关键在这句:m_pTargetPic =new Bitmap(filename);

这是调用了一个类的构造函数,类名是 Bitmap, 你看看你工程(估计是别人写的)里这个类的构造函数。
代码你没贴出来。

有多种读取图像的方法,一种是根据输入参数(比如文件名filename的后面三个字母,判断文件……
[/Quote]

但是请问我只提供一个文件名如01.jpg,它就能完全构造出一个Bitmap对象,还包含相应的图像信息吗?
谢谢解答
wltg2001 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tribbiani66 的回复:]
引用 2 楼 gusto 的回复:
关键在这句:m_pTargetPic =new Bitmap(filename);

这是调用了一个类的构造函数,类名是 Bitmap, 你看看你工程(估计是别人写的)里这个类的构造函数。
代码你没贴出来。

有多种读取图像的方法,一种是根据输入参数(比如文件名filename的后面三个字母,判断文件类型,然后分析其结构。。一种更简单的方法,是统一用……
[/Quote]
当然不同了,BMP文件与JPG文件的文件格式是完全不一样的。不过你不用考虑这个的,这个类已经在内部处理好了。
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tiger9991 的回复:]
C/C++ code

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;*.RL……
[/Quote]

getfilename知识获取文件名如01.bmp,没有路径啊
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gusto 的回复:]
关键在这句:m_pTargetPic =new Bitmap(filename);

这是调用了一个类的构造函数,类名是 Bitmap, 你看看你工程(估计是别人写的)里这个类的构造函数。
代码你没贴出来。

有多种读取图像的方法,一种是根据输入参数(比如文件名filename的后面三个字母,判断文件类型,然后分析其结构。。一种更简单的方法,是统一用IPicture控件(内置在windo……
[/Quote]

Bitmap是VS自带的一个类,在gdiplusheaders.h 中。。请问从图片中读数据,对于BMP,JPG有什么不同吗?
Tribbiani66 2010-10-11
  • 打赏
  • 举报
回复
3楼可以说得详细点吗?Bitmap是VS自带的,在gdiplusheaders.h中 ,小弟刚接触图像处理,对怎样从图片中读信息还不了解,谢谢了
hastings 2010-10-10
  • 打赏
  • 举报
回复
这就是类的方便之处~~
wltg2001 2010-10-10
  • 打赏
  • 举报
回复
m_pTargetPic =new Bitmap(filename);
========
这里的创建的工作其实就是说由new Bitmap(filename)来完成的,至于内部是如何转化的,关键就在于Bitmap这个类的构造函数是如何处理的了。
傻X 2010-10-10
  • 打赏
  • 举报
回复

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


zgl7903 2010-10-10
  • 打赏
  • 举报
回复
GDI+完成了烦琐的文件格式识别和转换,
如果有兴趣可以找这些都文件格式定义及编解码方式自己来处理
gusto 2010-10-10
  • 打赏
  • 举报
回复
关键在这句:m_pTargetPic =new Bitmap(filename);

这是调用了一个类的构造函数,类名是 Bitmap, 你看看你工程(估计是别人写的)里这个类的构造函数。
代码你没贴出来。

有多种读取图像的方法,一种是根据输入参数(比如文件名filename的后面三个字母,判断文件类型,然后分析其结构。。一种更简单的方法,是统一用IPicture控件(内置在windows里)。 你没给出 Bitmap源代码,无法知道你程序是如何读的。

答对了给分哦。
zyrr159487 2010-10-10
  • 打赏
  • 举报
回复
前面的那么多代码都只是创建打开文件对话框而已,创建的代码只有一句
m_pTargetPic =new Bitmap(filename);//filename是它打开的文件名

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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