BMP像素输出问题,急盼佳音!

_葫芦娃 2008-05-03 09:21:09
下面是我的程序代码,要读取BMP文件,现在已经读取了文件头和位图信息头,信息都正确.
接下来我想问的是如何读取位图像素值, 用一个二重循环输出就可以了,因为我好验证.
那位可以帮帮我,我想将像素值读取出来,但是不知道怎么样操作,那位可以在我的程序后加上 代码 补上了?
先行谢过!
// bmp.cpp : Defines the entry point for the console application.
//请把文件位置改掉运行

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include <iostream.h>

typedef unsigned short int WORD;
typedef unsigned long int DWORD;
typedef unsigned char BYTE ;

#pragma pack(1)

typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER; //定义文件头

typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
DWORD biWidth;
DWORD biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
DWORD biXPelsPerMeter;
DWORD biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER; //定义为头信息头

typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD; //定义颜色数据体,这是为以后输出准备的,也是 需要大家帮忙的

BITMAPFILEHEADER bmfHeader; /*BMP file header*/
BITMAPINFOHEADER bmiHeader; /*BMP info header*/

void main(void)
{

FILE *fp;
int Palette_Num;
int Width,Height, Width_4;
int i, j;

if ((fp=fopen( "F:\\Picture\\View\\11.bmp ", "rb "))==NULL){
cout<< "can not open source file "<<endl;
exit(0);
} //读取文件

fread(&bmfHeader,sizeof(bmfHeader),1,fp);
fread(&bmiHeader,sizeof(bmiHeader),1,fp);

cout<< "File Header: "<<endl; //输出文件头信息
cout<<"bfType= "<<bmfHeader.bfType<<endl;
cout<< "bfSize= "<<bmfHeader.bfSize<<endl;
cout<< "bfOffBits="<<bmfHeader.bfOffBits<<endl;

cout<< endl<<"Information Header: "<<endl; //输出位图信息头信息
cout<< "biSize="<<bmiHeader.biSize<<endl;
cout<< "biWidth="<<bmiHeader.biWidth<<endl;
cout<<"biHeight= "<<bmiHeader.biHeight<<endl;
cout<<"biBitCount="<<bmiHeader.biBitCount<<endl;
cout<< "biClrUsed="<<bmiHeader.biClrUsed<<endl;

getchar();
}
...全文
48 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
_葫芦娃 2008-05-04
  • 打赏
  • 举报
回复
发了3个问题求救,一个都没有真正为人所解,但是终于自己解决一个问题了,很高兴,这是图像处理做的第一个程序,很激动!我用指针加引用实现的.呵呵.
3楼非常谢谢,用#include <windows.h>是要省很多,但是要注意下自带的格式引用,呵呵,分都给你了,谢谢你的支持!
chowming 2008-05-04
  • 打赏
  • 举报
回复
开头加一句#include<windows.h>那些结构体就可以不用自己定义了
先定义一个BYTE数组,先将文件指针移到offsets那里,然后开始读到数组里面
数组大小要根据你的bmiHeader.biHeight和bmiHeader.biWidth还有bmiHeader.biBitCount确定
还有可能有颜色表要读
_葫芦娃 2008-05-04
  • 打赏
  • 举报
回复
初学很吃力了。
_葫芦娃 2008-05-03
  • 打赏
  • 举报
回复
那位方便的话做好可以交个朋友不?
我的QQ邮箱 361536099@qq.com

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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