VC6读取24位bmp文件

编程入门 行业动态 更新时间:2024-10-15 08:25:57

VC6读取24位bmp<a href=https://www.elefans.com/category/jswz/34/1771438.html style=文件"/>

VC6读取24位bmp文件

bmp格式内容包含四部分:
1:位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;
2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;
4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
一般的通过fread读取即可。但因为bmp格式要求,每行字节数必须4字节的整数倍,如果不对补位的空字节处理,易造成图像倾斜。
读取步骤简介:
fread(&bfType,1,sizeof(WORD),fpi);
//读取文件名
//读取bmp文件的文件头和信息头
fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);
showBmpHead(strHead);//显示文件头
fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);
showBmpInforHead(strInfo);//显示文件信息头
//读取调色板
for(unsigned int nCounti=0;nCounti

#include <stdio.h>
#include "Ex1.h"
#include "stdlib.h"
#include "math.h"
#include <iostream>
#define PI 3.14159//圆周率宏定义
#define LENGTH_NAME_BMP 30//bmp图片文件名的最大长度
using namespace std;
//变量定义
BITMAPFILEHEADER strHead; //位图文件头
RGBQUAD strPla[256];//256色调色板
BITMAPINFOHEADER strInfo;
//显示位图文件头信息
void showBmpHead(BITMAPFILEHEADER pBmpHead)
{cout<<"读取的位图文件信息:"<<endl;cout<<"文件大小:"<<pBmpHead.bfSize<<endl;//  cout<<"保留字_1:"<<pBmpHead.bfReserved1<<endl;//  cout<<"保留字_2:"<<pBmpHead.bfReserved2<<endl;cout<<"实际位图数据的偏移字节数:"<<pBmpHead.bfOffBits<<endl;
}
void showBmpInforHead(tagBITMAPINFOHEADER pBmpInforHead)
{//  cout<<"读取的位图信息头:"<<endl;cout<<"结构体的长度:"<<pBmpInforHead.biSize<<endl;cout<<"位图宽:"<<pBmpInforHead.biWidth<<endl;cout<<"位图高:"<<pBmpInforHead.biHeight<<endl;cout<<"biPlanes平面数:"<<pBmpInforHead.biPlanes<<endl;cout<<"biBitCount采用颜色位数:"<<pBmpInforHead.biBitCount<<endl;cout<<"压缩方式:"<<pBmpInforHead.biCompression<<endl;cout<<"biSizeImage实际位图数据占用的字节数:"<<pBmpInforHead.biSizeImage<<endl;cout<<"X方向分辨率:"<<pBmpInforHead.biXPelsPerMeter<<endl;cout<<"Y方向分辨率:"<<pBmpInforHead.biYPelsPerMeter<<endl;cout<<"使用的颜色数:"<<pBmpInforHead.biClrUsed<<endl;cout<<"重要颜色数:"<<pBmpInforHead.biClrImportant<<endl<<endl;
}
int max(int i,int j)
{if(i>=j)return i;elsereturn j;
}
int main()
{char strFile[LENGTH_NAME_BMP]; //bmp文件名WORD bfType_w=0x4d42;IMAGEDATA *imagedata = NULL; //动态分配存储原图片的像素信息的二维数组IMAGEDATA *imagedataCut = NULL;//动态分配存储裁剪后的图片的像素信息的二维数组IMAGEDATA *imagedataScal = NULL;//动态分配存储缩放后的图片的像素信息的二维数组IMAGEDATA *imagedataRot = NULL;//动态分配存储旋转后的图片的像素信息的二维数组int width,height;//图片的宽度和高度float ExpScalValue=0; 期望的缩放倍数(允许小数)int FloatToIntwidth,FloatToIntheight;/小数变成整数(float To Int)int RotateAngle=90;//要缩放的角度,默认90cout<<"请输入所要读取的文件名(w.bmp或者06.bmp或者07.bmp):"<<endl;strcpy (strFile , "E://test.bmp");cout<<"要读取的文件名:"<< strFile<<endl;FILE *fpi,*fpw;fpi=fopen(strFile,"rb");if(fpi != NULL){//先读取文件类型WORD bfType;fread(&bfType,1,sizeof(WORD),fpi);if(0x4d42!=bfType)///if !=BMP{cout<<"the file is not a bmp file!"<<endl;return NULL;}printf("\n读取到的文件是%s。\n\n",strFile);//读取bmp文件的文件头和信息头fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);showBmpHead(strHead);//显示文件头fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);showBmpInforHead(strInfo);//显示文件信息头//读取调色板for(unsigned int nCounti=0;nCounti<strInfo.biClrUsed;nCounti++){fread((char *)&(strPla[nCounti].rgbBlue),1,sizeof(BYTE),fpi);fread((char *)&(strPla[nCounti].rgbGreen),1,sizeof(BYTE),fpi);

更多推荐

VC6读取24位bmp文件

本文发布于:2024-03-04 18:20:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710036.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   bmp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!