//C代码
//ReadBitMap
//
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <malloc.h>
#include <math.h>
#define WIDTHBYTES(bits) (((bits)+31)/32*4)
typedef unsigned char BYTE;//一个字节( Byte):用8位2进制表示
typedef unsigned short WORD;//一个字:用双字节(16位2进制表示)
typedef unsigned long DWORD;//双字:(32位2进制表示)
typedef long LONG;
//位图文件头信息结构定义
//其中不包含文件类型信息
typedef struct tagBITMAPFILEHEADER_
{
WORD bfType;//文件类型,必须为 "BM"(0x4D42)
DWORD bfSize;//文件大小
WORD bfReserved1; //保留字,不考虑
WORD bfReserved2; //保留字,同上
DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和
}BITMAPFILEHEADER_;
//------------------------------------------------------------
//为了在写入文件时方便,把位图文件类型单独定义到一个结构体里面
//位图文件头信息结构定义,不包含文件类型信息
typedef struct tagBITMAPFILEHEADER
{
DWORD bfSize; //文件大小
WORD bfReserved1; //保留字,不考虑
WORD bfReserved2; //保留字,同上
DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和
}BITMAPFILEHEADER;
//上面定义的结构体长度刚好为12,4的倍数
//单独的文件类型结构体
typedef struct tagBITMAPFILETYPE
{
WORD bfType;//文件类型,必须为 "BM"(0x4D42)
}BITMAPFILETYPE;
//------------------------------------------------------------
//信息头BITMAPINFOHEADER,也是一个结构,其定义如下:
typedef struct tagBITMAPINFOHEADER
{
//public://默认的属性是共有,而类的默认属性是私有
DWORD biSize; //指定此结构体的长度,为40
LONG biWidth; //位图宽
LONG biHeight; //位图高
WORD biPlanes; //平面数,为1
WORD biBitCount; //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32
DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩
DWORD biSizeImage; //实际位图数据占用的字节数
LONG biXPelsPerMeter;//X方向分辨率
LONG biYPelsPerMeter;//Y方向分辨率
DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)
DWORD biClrImportant;//重要颜色数,如果为0,则表示所有颜色都是重要的
}BITMAPINFOHEADER;
//上面的信息头结构体长度刚好为40,最长的元素为4字节,40是4的倍数
//故写入文件时,可一次写入,写入的字节长度为sizeof(BITMAPINFOHEADR)
//--------------------------------------------------------------------
//调色板Palette,当然,这里是对那些需要调色板的位图文件而言的。24位和32位是不需要调色板的。
typedef struct tagRGBQUAD
{
//public:
BYTE rgbBlue; //蓝色分量
BYTE rgbGreen; //绿色分量
BYTE rgbRed; //红色分量
BYTE rgbReserved;//保留值,必须为0
}RGBQUAD;
void CreateBmpFile8(char *filename,long width,long height,BYTE bitCount,BYTE color );
void CreateBmpFile24(char *filename,long width,long height,BYTE bitCount,BYTE color );
void ReadFromBmpFile(char *srcFileName,char *dstFileName="999.bmp");
typedef struct
{
char filename[256];
long width;
long height;
BYTE bitCount;
BYTE color;
}CBMP;
typedef struct
{
char src[256];
char dst[256];
}RBMP;
/*
┌ ┬ ┐┤┘┴└├ ┼ ─│┘─└
╔ ╦ ╗ ╣ ╝ ╩ ╚ ╠ ╬ ═ ═ ║ ║
╓ ╥ ╖ ╢ ╜ ╨ ╙ ╟ ╫
╒ ╤ ╕ ╡ ╛ ╧ ╘ ╞ ╪
┏ ┳ ┓ ┫ ┛ ┻ ┗ ┣ ╋ ┏ ━ ┃ ━ ┃
┌ ─ ┐ │ ┘ ─ └ │
┌ ┬ ┐ ┤ ┘ ┴ └ ├ ┼ ─ │ ─ │
*/
int main(void)
{
int choice=0;
char option1[5]="exit";
char option2[7]="return";
char option[7]="return";
while(1)
{
if ((!strcmp(option,option2)))
{
printf("┌──────────────────────────┐\n");
printf("│请输入您的选项: │\n");
printf("│ 1.创建一幅bmp图像; │\n");
printf("│ 2.读取一幅bmp图像; │\n");
printf("│ 3.退出!! │\n");
printf("├──────────────────────────┤\n");
printf("│选择: │\n");
printf("│ ");
scanf("%d",&choice);
if (choice!=1&&choice!=2&&choice!=3)
{
continue;
}
CBMP cbmpfile={0};
RBMP rbmpfile={0};
switch(choice)
{
case 1:
printf("├──────────────────────────┤\n");
printf("│依次输入要创建的位图文件的信息: │\n");
printf("│ 1.位图文件名(例如:C:\\test.bmp) │\n");
printf("│ 2.位图的宽 │\n");
printf("│ 3.位图的高 │\n");
printf("│ 4.位图颜色位深(8或者24) │\n");
printf("│ 5.颜色值 │\n");
printf("│ .如果是8位的就输入0-255之间的数、 │\n");
printf("│ .如果是24位的就输入:1 、2、3 中的一个, │\n");
printf("│ 分别表示红色、绿色、蓝色) │\n");
printf("├──────────────────────────┤\n");
//---------------------------------------------------------------
printf("│您输入的信息: │\n");
printf("│ 1.位图文件名:");
scanf("%s",cbmpfile.filename);
printf("│ 2.位图的宽:");
scanf("%d",&cbmpfile.width);
printf("│ 3.位图的高:");
scanf("%d",&cbmpfile.height);
printf("│ 4.位图颜色位深:");
scanf("%d",&cbmpfile.bitCount);
printf("│ 5.颜色值:");
scanf("%d",&cbmpfile.color);
printf("├──────────────────────────┤\n");
//---------------------------------------------------------------
if (cbmpfile.color>=4&&cbmpfile.color<=255)
{
//利用输入的参数,调用创建位图函数
CreateBmpFile8(cbmpfile.filename,cbmpfile.width,cbmpfile.height,cbmpfile.bitCount,cbmpfile.color);
printf("┌──────────────────────────┐\n");
printf("│创建位图完毕: │\n");
printf("│ 1.返回请输入: return │\n");
printf("│ 2.退出请输入: exit │\n");
printf("├──────────────────────────┤\n");
printf("│选择:");
scanf("%s",&option);
printf("│──────────────────────────┤\n");
}
else if (cbmpfile.color>=1&&cbmpfile.color<=3)
{
switch(cbmpfile.color)
{
case 1:
//利用输入的参数,调用创建位图函数
CreateBmpFile24(cbmpfile.filename,cbmpfile.width,cbmpfile.height,cbmpfile.bitCount,cbmpfile.color);
printf("┌──────────────────────────┐\n");
printf("│创建位图完毕: │\n");
printf("│ 1.返回请输入: return │\n");
printf("│ 2.退出请输入: exit │\n");
printf("├──────────────────────────┤\n");
printf("│选择:");
scanf("%s",&option);
printf("│──────────────────────────┤\n");
break;
case 2:
//利用输入的参数,调用创建位图函数
CreateBmpFile24(cbmpfile.filename,cbmpfile.width,cbmpfile.height,cbmpfile.bitCount,cbmpfile.color);
printf("┌──────────────────────────┐\n");
printf("│创建位图完毕: │\n");
printf("│ 1.返回请输入: return │\n");
printf("│ 2.退出请输入: exit │\n");
printf("├──────────────────────────┤\n");
printf("│选择:");
scanf("%s",&option);
printf("│──────────────────────────┤\n");
break;
case 3:
//利用输入的参数,调用创建位图函数
CreateBmpFile24(cbmpfile.filename,cbmpfile.width,cbmpfile.height,cbmpfile.bitCount,cbmpfile.color);
printf("┌─────────────────�
(直接创建+读取)(灰度+真彩bmp文件
5星 · 超过95%的资源 需积分: 9 38 浏览量
2011-03-05
15:39:56
上传
评论 6
收藏 56KB RAR 举报
TandyT
- 粉丝: 244
- 资源: 17
最新资源
- IMG_20240425_120538.jpg
- My Complete Genome_6k Base-Pairs of Phenotype SNPs_Complete Raw Data.zip
- qt 的mqtt测试demo
- 移动应用开发教程-zip.zip
- mosquitto-2.018-install-windows-x64
- FTPServer FTP 服务器,绿色免安装,单文件
- 梦畅语音点名软件,上课点名
- 利用ADNI数据集和标签,在tensorflow框架上使用tensorlayer接口,通过架构u-net实现海马体的分割
- Kutools for Word v9.0 office word 插件
- 修复Windows 10 LTSC 2021资源占用率高
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页