菜鸟基础提问:如何在c++中读取位图?(恳求详细解答)

pf220998 2009-02-20 02:09:53
各位老鸟,我学了一学期的c++,对其很感兴趣,就想在图像处理上研究一下,没想到在第一步就卡住了
我想在c++中读取一个本地的位图,但无论查电子书还是网上搜索都让我很困惑,希望大家能稍加详细地点拨一下哈~~
从网上和书上我知道步骤,也下载了一些代码,但这些代码不是编译不通过就是MFC,都快疯了……
我知道步骤是:
打开文件
读入位图文件头,位图信息头
根据信息确定宽度、高度、颜色位数、是否行翻转,是否使用调色板
计算行长(考虑位图的字节对齐问题)
申请内存用于保存像素数据
从文件中读出像素数据
每一个像素点显示,得到整个位图图像。

但具体实在做不出来,麻烦各位老鸟给个详细的能编译通过的代码让我看看,我现在其实就是原理什么都懂,但就是想实际看看具体的程序到底是如何读取一个本地位图的~~~

喜欢编程,喜欢CSDN,希望一起进步!拜谢……^_^
...全文
583 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwqxin 2009-03-28
  • 打赏
  • 举报
回复
其实直接用LoadImage的话,会比自己动手差么.....

http://dev.yesky.com/164/2291664.shtml

henrythoreau 2009-03-28
  • 打赏
  • 举报
回复
为什么不用MFC呢
好多书上有源码啊,而且方法多样
封装好的CDib或CImage类很容易找到的
xiaowen2456 2009-03-26
  • 打赏
  • 举报
回复
我急需啊,谢谢给我一份啊qicai520@163.com
glacier3d 2009-03-25
  • 打赏
  • 举报
回复
最简单的loadimage API直接搞定。
unusual001 2009-03-23
  • 打赏
  • 举报
回复
异常感谢,lrbv@163.com
胖多多是我 2009-03-22
  • 打赏
  • 举报
回复
非常感谢!~~
north55@126.com
pf220998 2009-02-22
  • 打赏
  • 举报
回复
非常感谢!~~
xiangmin.liang@gmail.com
mxw0922 2009-02-20
  • 打赏
  • 举报
回复
把邮箱给我,发个关于图像处理的源程序给你参考一下,里面有很多图像处理算法!
还在查 2009-02-20
  • 打赏
  • 举报
回复
C++控制台能输出位图?
pf220998 2009-02-20
  • 打赏
  • 举报
回复
这是我找到的一个关于位图读取和简单处理的源码,大家看看,是不是这个样子

#include<stdio.h>
#include<math.h>
#include<iostream>
#include<bitset>
using namespace std;

void main(){

FILE *fp,*fq,*ft;
int i;
int k=132; //位图字节数 ,t[132]={0}
char head[62]={0},body[133]={0};
bitset <8> b;

//读实际位图bit数据
fp=fopen("c:/temp/bmp/BMP-1.bmp","rb");
for(i=0;i<62;i++) //读位图头的字节
head[i]=fgetc(fp);
for(i=0;i<133;i++) //读位图图字节
body[i]=fgetc(fp);

//实际位图bit输出到屏幕
cout<<"实际位图bit输出到屏幕"<<endl;
for(i=1;i<=32;i++){
k=k-4;
for(int j=0;j<4;j++){
bitset<8> b(body[k+j]);
cout<<b;
}
cout<<endl;
}cout<<endl<<"修改后输出到屏幕:"<<endl;
//实际位图bit存入磁盘c:/temp/bmp/bmp-1-1.bmp
fq=fopen("c:/temp/bmp/bmp-1-1.bmp","w");
for(i=0;i<62;i++) fputc(head[i],fq);
for(i=0;i<132;i++)fputc(body[i],fq);
fputc(body[132],fq);

//位图数据处理,将每个字节末位置'0'
for(i=0;i<132;i++){
unsigned int t=body[i];
t=t&254;
char c=t;
body[i]=c;
}
//修改后位图bit输出到屏幕;
for(k=132,i=1;i<=32;i++){
k=k-4;
for(int j=0;j<4;j++){
bitset<8> b(body[k+j]);
cout<<b;
}
cout<<endl;
}

//修改末字节后存入磁盘c:/temp/bmp/bmp-1-2.bmp
ft=fopen("c:/temp/bmp/bmp-1-2.bmp","wb");
for(i=0;i<62;i++) fputc(head[i],ft);
for(i=0;i<132;i++)fputc(body[i],ft);
fputc(body[132],ft);
fclose (fp);
fclose (ft);
}
ivanwo 2009-02-20
  • 打赏
  • 举报
回复
如果是VC6.0以上的版本,可以直接调用ATL的CImage类,可以读取多种格式的图像,很方便
hemdacker 2009-02-20
  • 打赏
  • 举报
回复
用Bitmap的API
fandh 2009-02-20
  • 打赏
  • 举报
回复
建议你下载一个CXIMAGE,里面什么都有,源代码、例子都有!
baihui212 2009-02-20
  • 打赏
  • 举报
回复
up,帮顶
发多一份,amal123@qq.com
内容概要:本文围绕面向光储充一体化社区的电动汽车有序充电双层优化策略展开研究,提出了一种结合上层系统优化与下层用户优化的协同调度模型。上层以削峰填谷、降低电网购电成本为目标,优化光储系统与电动汽车的整体充放电行为;下层则聚焦于最小化用户个体充电费用,提升用户参与积极性。通过Matlab平台实现模型求解,融合智能优化算法对光伏发电的随机性、负荷波动及用户充电需求多样性进行建模与协同调度,有效提升了可再生能源的就地消纳能力,减小了电网峰谷差。研究还引入虚拟储能、需求响应等机制,增强了系统的灵活性与经济性,为社区级综合能源系统的优化运行提供了理论依据与技术路径。; 适合人群:具备电力系统分析、优化建模及Matlab编程基础的科研人员,尤其适用于从事微电网、综合能源系统、电动汽车调度、需求响应等领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:①应用于光储充一体化社区能量管理系统的设计与运行优化;②为实现电动汽车有序充电、提升分布式能源利用率、降低电网运行压力提供解决方案;③服务于双层优化模型的学习与复现,深化对主从博弈、分布式优化等高级建模方法的理解与应用。; 阅读建议:建议读者结合提供的Matlab代码深入剖析模型构建细节,重点关注上下层目标函数的耦合关系、约束条件的数学表达以及求解算法的实现流程,同时可参考文涉及的智能优化算法与其他综合能源案例,拓展实际科研与工程应用思路。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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