VC提取文件中的图片

我的想法是这样的,将一个文件导入内存,比如:HANDLEhFile=::CreateFile(file.lpstrFile,GENERIC_READ,FILE_SHARE... 我的想法是这样的,将一个文件导入内存,比如:
HANDLE hFile=::CreateFile(file.lpstrFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY, NULL, NULL, NULL);
LPVOID lpBase = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);然后读取lpBase中VRAM的数据,之后将数据化为象素点,用SetPixel.
不知道这种方法可不可行,还有没有另外一种办法呢?
如果是png或其它呢
其实我是想导出一些游戏的图片,请问有更好的方法呢
一些小游戏的图片格式我想应该都是png格式,因为背景都是透明色,由于文件只能比较小,所以图片文件可能不存在文件头信息
展开
 我来答
stone_dongdong
2009-11-02 · TA获得超过2853个赞
知道大有可为答主
回答量:1636
采纳率:0%
帮助的人:1019万
展开全部
每种文件类型都有标记头来标记当前文件的类型。(图像文件自不必说)。
象 bmp,jpg,png,ico等文件都有头标记来。

如果图片是整个安装文件的方式嵌入在一个大文件里面,你可以先在缓冲区中搜索 这个标记字符串(比如bmp是,BM ),搜到后,根据长度(长度的获取,根据文件的描述信息在文件头标记后面有记录的,也可以假定一个较大值,由Load自动判断)构建一个流,再使用 CImage 类的 Load来装入这个流,看能否识别为图片。

如果图片只是将数据装入在文件里面,一般都是bmp格式的(数据方式不可能为压缩格式存储,因为CPU处理都是按照位图处理的,如果转换保存格式,存储和装入会比较麻烦),根据bmp信息头的信息来自动匹配好了,比如MSDN上说 BITMAPINFOHEADER 上某个字段必须为0,等等,来模拟判断。使用 CreateDIBSection 来构建DIB图像,再将缓冲区数据考入DIB的缓冲区中。就能显示了

不要 SetPixel。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
etiu2009
2009-10-31 · TA获得超过968个赞
知道小有建树答主
回答量:481
采纳率:0%
帮助的人:508万
展开全部
用 SetPixel 的效率很低。

如果是已知图片格式(bmp jpg png 等)而不是自定义格式,可以直接用 GDI+ 载入并显示图片,会自动判断图片格式的。

如果是 bmp,也可以用 GDI 的 LoadImage。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flecy
2009-11-19 · 超过17用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:38.1万
展开全部
PNG格式是最适合的。甚至于PNG图片可以根据不同用户显示不同的信息的。
如果实在想要不同格式的,就可以用GDI来判断图片格式。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wawoo2007
2009-11-16 · TA获得超过626个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:635万
展开全部
图片文件都是带格式的,只有RAW格式的图片文件可以直接读取原始数据画图
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vcxz_1982
2009-11-08 · 超过43用户采纳过TA的回答
知道答主
回答量:125
采纳率:0%
帮助的人:101万
展开全部
用GDI+ 估计你一时半会学不会

用CxImage类,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式