![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
怎么用C++读取和引用位图文件的长和宽
这样的开头应该怎么修改才能实现#include<stdlib.h>#include<iostream.h>#include<fstream.h>#include"math...
这样的开头应该怎么修改才能实现
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>
#include"math.h"
typedef struct //位图文件头格式
{
int bfType; /* 类型标志,总是BM */
long bfSize; /* 文件大小 */
int bfReserved1;
int bfReserved2;
long bfOffBits; /* 位图点阵偏移量*/
}HEAD;
typedef struct
{
long biSize; /* 结构体字节总数 */
long biWidth; /* 图像宽度 */
long biHeight; /* 图像高度 */
int biPlanes; /* 必须为1 */
int biBitCount; /* 每个像素所占二进制位数,可能是1,4,8或 24 */
long biCompress; /*压缩方式*/
long biSizeImage; /*像素点阵大小 */
long biXPelsPerMeter; /* 水平像素数*/
long biYPelsPerMeter; /* 垂直像素数 */
long biClrUsed; /*使用的颜色数 */
long biClrImportant; /*重要颜色数 */
}INFO;
typedef struct
{
unsigned char rgbBlue; /*蓝色所占比重*/
unsigned char rgbGreen; /*绿色所占比重*/
unsigned char rgbRed; /*红色所占比重*/
unsigned char rgbReserved; /*保留字节 */
}RGBQUAD;
int Match(int nRed,int nGreen,int nBlue); /*寻找与像素匹配的调色板的序号*/
void Sharp(ifstream &infile,ofstream&outfile);//锐化处理
void Emboss(ifstream &infile,ofstream&outfile);//浮雕效果处理
void Smooth(ifstream &infile,ofstream&outfile);//柔化效果处理
void Mosaic(ifstream &infile,ofstream&outfile);//马赛克效果处理
void Initial(int nChoice); /*初始化图像文件*/
RGBQUAD straPla[256]; /*256色调色板*/
HEAD strHead;
INFO strInfo;
#define nWidth 512
#define nDepth 512 /*处理512×512位图*/
unsigned char naImage[512][512]; 展开
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>
#include"math.h"
typedef struct //位图文件头格式
{
int bfType; /* 类型标志,总是BM */
long bfSize; /* 文件大小 */
int bfReserved1;
int bfReserved2;
long bfOffBits; /* 位图点阵偏移量*/
}HEAD;
typedef struct
{
long biSize; /* 结构体字节总数 */
long biWidth; /* 图像宽度 */
long biHeight; /* 图像高度 */
int biPlanes; /* 必须为1 */
int biBitCount; /* 每个像素所占二进制位数,可能是1,4,8或 24 */
long biCompress; /*压缩方式*/
long biSizeImage; /*像素点阵大小 */
long biXPelsPerMeter; /* 水平像素数*/
long biYPelsPerMeter; /* 垂直像素数 */
long biClrUsed; /*使用的颜色数 */
long biClrImportant; /*重要颜色数 */
}INFO;
typedef struct
{
unsigned char rgbBlue; /*蓝色所占比重*/
unsigned char rgbGreen; /*绿色所占比重*/
unsigned char rgbRed; /*红色所占比重*/
unsigned char rgbReserved; /*保留字节 */
}RGBQUAD;
int Match(int nRed,int nGreen,int nBlue); /*寻找与像素匹配的调色板的序号*/
void Sharp(ifstream &infile,ofstream&outfile);//锐化处理
void Emboss(ifstream &infile,ofstream&outfile);//浮雕效果处理
void Smooth(ifstream &infile,ofstream&outfile);//柔化效果处理
void Mosaic(ifstream &infile,ofstream&outfile);//马赛克效果处理
void Initial(int nChoice); /*初始化图像文件*/
RGBQUAD straPla[256]; /*256色调色板*/
HEAD strHead;
INFO strInfo;
#define nWidth 512
#define nDepth 512 /*处理512×512位图*/
unsigned char naImage[512][512]; 展开
2个回答
展开全部
只读取长宽属性吗?如下:
#include<iostream>
#include<fstream>
using namespace std;
#pragma pack(1) //1字节对齐
typedef struct tagBITMAPFILEHEADER
{
short bfType; // 位图文件的类型,必须为BM(0-1字节)
int bfSize; // 位图文件的大小,以字节为单位(2-5字节)
short bfReserved1; // 位图文件保留字,必须为0(6-7字节)
short bfReserved2; // 位图文件保留字,必须为0(8-9字节)
int bfOffBits; // 位图数据的起始位置,以相对于位图(10-13字节)
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
int biSize; // 本结构所占用字节数(14-17字节)
long biWidth; // 位图的宽度,以像素为单位(18-21字节)
long biHeight; // 位图的高度,以像素为单位(22-25字节)
short biPlanes; // 目标设备的级别,必须为1(26-27字节)
short biBitCount;// 每个像素所需的位数,必须是1(双色),(28-29字节)
// 4(16色),8(256色)或24(真彩色)之一
int biCompression; // 位图压缩类型,必须是 0(不压缩),(30-33字节)
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
int biSizeImage; // 位图的大小,以字节为单位(34-37字节)
long biXPelsPerMeter; // 位图水平分辨率,每米像素数(38-41字节)
long biYPelsPerMeter; // 位图垂直分辨率,每米像素数(42-45字节)
int biClrUsed;// 位图实际使用的颜色表中的颜色数(46-49字节)
int biClrImportant;// 位图显示过程中重要的颜色数(50-53字节)
} BITMAPINFOHEADER;
typedef struct tagRGBQUAD {
unsigned char rgbBlue;// 蓝色的亮度(值范围为0-255)
unsigned char rgbGreen; // 绿色的亮度(值范围为0-255)
unsigned char rgbRed; // 红色的亮度(值范围为0-255)
unsigned char rgbReserved;// 保留,必须为0
} RGBQUAD;
#pragma pack()
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
int main()
{
ifstream input("bitmap.bmp");
if (!input) return 0;
input.read((char*)&bfh, sizeof(BITMAPFILEHEADER));
if (bfh.bfType != (('M'<<8)|'B')) {
cout << "bad format!" << endl;
return 0;
}
input.read((char*)&bih, sizeof(BITMAPINFOHEADER));
cout << bih.biWidth << endl << bih.biHeight << endl;
return 0;
}
#include<iostream>
#include<fstream>
using namespace std;
#pragma pack(1) //1字节对齐
typedef struct tagBITMAPFILEHEADER
{
short bfType; // 位图文件的类型,必须为BM(0-1字节)
int bfSize; // 位图文件的大小,以字节为单位(2-5字节)
short bfReserved1; // 位图文件保留字,必须为0(6-7字节)
short bfReserved2; // 位图文件保留字,必须为0(8-9字节)
int bfOffBits; // 位图数据的起始位置,以相对于位图(10-13字节)
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
int biSize; // 本结构所占用字节数(14-17字节)
long biWidth; // 位图的宽度,以像素为单位(18-21字节)
long biHeight; // 位图的高度,以像素为单位(22-25字节)
short biPlanes; // 目标设备的级别,必须为1(26-27字节)
short biBitCount;// 每个像素所需的位数,必须是1(双色),(28-29字节)
// 4(16色),8(256色)或24(真彩色)之一
int biCompression; // 位图压缩类型,必须是 0(不压缩),(30-33字节)
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
int biSizeImage; // 位图的大小,以字节为单位(34-37字节)
long biXPelsPerMeter; // 位图水平分辨率,每米像素数(38-41字节)
long biYPelsPerMeter; // 位图垂直分辨率,每米像素数(42-45字节)
int biClrUsed;// 位图实际使用的颜色表中的颜色数(46-49字节)
int biClrImportant;// 位图显示过程中重要的颜色数(50-53字节)
} BITMAPINFOHEADER;
typedef struct tagRGBQUAD {
unsigned char rgbBlue;// 蓝色的亮度(值范围为0-255)
unsigned char rgbGreen; // 绿色的亮度(值范围为0-255)
unsigned char rgbRed; // 红色的亮度(值范围为0-255)
unsigned char rgbReserved;// 保留,必须为0
} RGBQUAD;
#pragma pack()
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
int main()
{
ifstream input("bitmap.bmp");
if (!input) return 0;
input.read((char*)&bfh, sizeof(BITMAPFILEHEADER));
if (bfh.bfType != (('M'<<8)|'B')) {
cout << "bad format!" << endl;
return 0;
}
input.read((char*)&bih, sizeof(BITMAPINFOHEADER));
cout << bih.biWidth << endl << bih.biHeight << endl;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询