24位BMP位图转换成ASCII码字符图
2017-04-18 18:31
225 查看
C++语言编程读取24位*.bmp格式位图图像,并显示对应图像的ASCII字符图。
示例图片
![](https://img-blog.csdn.net/20170418182904248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ3NDQ2Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
ASCII码字符图
![](https://img-blog.csdn.net/20170418183002256?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ3NDQ2Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
关于BMP位图的内容可以访问博客:BMP格式详解
#include <stdio.h> #include <stdlib.h> #pragma pack(2) typedef unsigned short WORD;/*定义WORD为两个字节的类型*/ typedef unsigned long DWORD;/*定义DWORD为e四个字节的类型*/ /*位图文件头*/ typedef struct BMP_FILE_HEADER { WORD bType; /* 文件标识符*/ DWORD bSize; /* 文件的大小*/ WORD bReserved1; /* 保留值,必须设置为*/ WORD bReserved2; /* 保留值,必须设置为*/ DWORD bOffset; /* 文件头的最后到图像数据位开始的偏移量*/ } BMPFILEHEADER; /*位图信息头*/ typedef struct BMP_INFO { DWORD bInfoSize; /* 信息头的大小*/ DWORD bWidth; /* 图像的宽度*/ DWORD bHeight; /* 图像的高度*/ WORD bPlanes; /* 图像的位面数*/ WORD bBitCount; /* 每个像素的位数*/ DWORD bCompression; /* 压缩类型*/ DWORD bmpImageSize; /* 图像的大小,以字节为单位*/ DWORD bXPelsPerMeter; /* 水平分辨率*/ DWORD bYPelsPerMeter; /* 垂直分辨率*/ DWORD bClrUsed; /* 使用的色彩数*/ DWORD bClrImportant; /* 重要的颜色数*/ } BMPINF; /*彩色表*/ typedef struct RGB_QUAD { WORD rgbBlue; /* 蓝色强度*/ WORD rgbGreen; /* 绿色强度*/ WORD rgbRed; /* 红色强度*/ WORD rgbReversed; /* 保留值*/ } RGBQUAD; int main() { FILE *fp; BMPFILEHEADER fileHeader; BMPINF infoHeader; long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount; WORD c; if((fp = fopen("C:\\music.bmp", "rb")) == NULL) //图片路径可修改 { printf("这个文件不存在!\n"); exit(0); } fread(&fileHeader, sizeof(fileHeader), 1, fp); fread(&infoHeader, sizeof(infoHeader), 1, fp); //计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节 size = fileHeader.bSize; offset = fileHeader.bOffset; bmpImageSize = infoHeader.bmpImageSize; width = infoHeader.bWidth; height = infoHeader.bHeight; bitCount = infoHeader.bBitCount; bytesPerPixel = infoHeader.bBitCount / 8; // printf("大小:%d , 宽:%d 高:%d \n", size, width, height); c = fgetc(fp); //输出每个像素点所占字节中的内容 while (!feof(fp)) { c = fgetc(fp); } fseek(fp, offset, SEEK_SET); //跳过图像信息头部分 int fp_width=0; int i,j,ascii=22; //选用的ascii码可修改 int m=width*3%4; //通过计算得到每行计算机需要填充的字符数 if(m!=0) { fp_width=4-m; } int red[200][300]; //申请像素数组大小 int green[200][300]; int blue[200][300]; for(i=height-1;i>=0;i--) //通过遍历给数组存值 { for(j=0;j<width;j++) { red[i][j]=fgetc(fp); green[i][j]=fgetc(fp); blue[i][j]=fgetc(fp); } fseek(fp,fp_width,1); //跳过扫描时每行填充的字符,fp_width表示每行计算机需要填充的字符数 } for( i=0;i<height;i++) { for( j=0;j<width;j++) { if(red[i][j]==0&&green[i][j]==0&&blue[i][j]==0) { printf(" %c",ascii); }else if(red[i][j]==255&&green[i][j]==255&&blue[i][j]==255) { printf(" "); //加空格图片显示得更有比例,但可能CMD 显示不全 } } printf("\n"); } fclose(fp); return 0; }
示例图片
ASCII码字符图
关于BMP位图的内容可以访问博客:BMP格式详解
相关文章推荐
- 实现1位,4位,8位,24位BMP位图的互相转换的方法,32位转24位
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
- BMP的8位位图转换24位位图
- 本人用汇编写的一个bmp位图的字符转换程序
- 数字如何转换成ASCII码字符――谭浩强C课后题4.9
- delphi 实现 图片类型转换 jpg---bmp 及修改位图大小
- 24位真彩位图转4位(16色)灰度图(BMP)
- 字符及中文转换到Ascii码
- python中ASCII码字符与int之间的转换
- 字符转换(2,8,10,16进制,ASCII码)
- python中ascii码和字符的转换
- 字符转换(2,8,10,16进制,ASCII码)
- acmore|acmore.cc1011将磅转换为千克1012财务应用程序:计算消费1013求一个整数各位数的和1014求出年数1015求ASCII码对应的字符
- python中ascii码和字符的转换
- 24位RGB位图转换成1位位图
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- 二进制字符串和十六进制字符串转换为对应ASCII码和字符中不同进制间的转换
- ascii码与字符的转换