![]() |
#2
无所谓想2012-01-27 16:31
|

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#pragma pack(2)
/*定义WORD为两个字节的类型*/
typedef unsigned short WORD;
/*定义DWORD为e四个字节的类型*/
typedef unsigned long DWORD;
struct image
{
char data[4000];
};
struct image * p[1200];
typedef struct BMP_FILE_HEADER
{
WORD bType; /* 文件标识符 */
DWORD bSize; /* 文件的大小 */
WORD bReserved1; /* 保留值,必须设置为0 */
WORD bReserved2; /* 保留值,必须设置为0 */
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()
{
int num=0;
char address[100];
char name[100];
BMPFILEHEADER fileHeader;
BMPINF infoHeader;
long width,height;
FILE * final;
FILE *fp,* memry;
int pix[3];
int rwidth=0,middle=0;
long offset, bmpImageSize, bytesPerPixel, size, bitCount;
while(1)
{
if(num==6566)break;
sprintf(address,"e:\\BMP2\\s150_pt%d.bmp",num);
sprintf(name,"e:\\mem\\pt%d.txt",num);
num++;
memry = fopen("e:\\time\\T.txt", "w+");
final = fopen(name,"w+");
// int i, j;
// unsigned char **p;
WORD c;
if((fp = fopen(address, "rb")) == NULL)
{
printf("Cann't open the file!\n");
exit(0);
}
fseek(fp, 0, 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个文件转换完成!",num);
//输出每个像素点所占字节中的内容
pix[0] = fgetc(fp);
pix[1] = fgetc(fp);
pix[2] = fgetc(fp);
while (!feof(fp))
{
if(pix[0]<=10&&pix[1]<=10&&pix[2]<=10)
{
fputc('@',memry);
}
if(pix[0]>=200&&pix[1]>=200&&pix[2]>=200)
{
fputc(' ',memry);
}
rwidth++;
if(rwidth==width)
{
fputc('\n',memry);
rwidth=0;
}
pix[0] = fgetc(fp);
pix[1] = fgetc(fp);
pix[2] = fgetc(fp);
}
fclose(fp);
fseek(memry, 0, 0);
for(middle=1;middle<=height;middle++)
{
p[middle]=(struct image *)malloc(sizeof(struct image));
fgets(p[middle]->data,4000,memry);
}
middle--;
for(;middle>0;middle--)
{
fputs(p[middle]->data,final);
free(p[middle]);
}
rwidth=0;
fclose(final);
fclose(memry);
}
system("pause");
return 0;
}
在读取大图的时候没有问题,但是一旦读取小图,就会产生错位现象,并且效果极差 #include <stdio.h>
#include <stdlib.h>
#pragma pack(2)
/*定义WORD为两个字节的类型*/
typedef unsigned short WORD;
/*定义DWORD为e四个字节的类型*/
typedef unsigned long DWORD;
struct image
{
char data[4000];
};
struct image * p[1200];
typedef struct BMP_FILE_HEADER
{
WORD bType; /* 文件标识符 */
DWORD bSize; /* 文件的大小 */
WORD bReserved1; /* 保留值,必须设置为0 */
WORD bReserved2; /* 保留值,必须设置为0 */
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()
{
int num=0;
char address[100];
char name[100];
BMPFILEHEADER fileHeader;
BMPINF infoHeader;
long width,height;
FILE * final;
FILE *fp,* memry;
int pix[3];
int rwidth=0,middle=0;
long offset, bmpImageSize, bytesPerPixel, size, bitCount;
while(1)
{
if(num==6566)break;
sprintf(address,"e:\\BMP2\\s150_pt%d.bmp",num);
sprintf(name,"e:\\mem\\pt%d.txt",num);
num++;
memry = fopen("e:\\time\\T.txt", "w+");
final = fopen(name,"w+");
// int i, j;
// unsigned char **p;
WORD c;
if((fp = fopen(address, "rb")) == NULL)
{
printf("Cann't open the file!\n");
exit(0);
}
fseek(fp, 0, 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个文件转换完成!",num);
//输出每个像素点所占字节中的内容
pix[0] = fgetc(fp);
pix[1] = fgetc(fp);
pix[2] = fgetc(fp);
while (!feof(fp))
{
if(pix[0]<=10&&pix[1]<=10&&pix[2]<=10)
{
fputc('@',memry);
}
if(pix[0]>=200&&pix[1]>=200&&pix[2]>=200)
{
fputc(' ',memry);
}
rwidth++;
if(rwidth==width)
{
fputc('\n',memry);
rwidth=0;
}
pix[0] = fgetc(fp);
pix[1] = fgetc(fp);
pix[2] = fgetc(fp);
}
fclose(fp);
fseek(memry, 0, 0);
for(middle=1;middle<=height;middle++)
{
p[middle]=(struct image *)malloc(sizeof(struct image));
fgets(p[middle]->data,4000,memry);
}
middle--;
for(;middle>0;middle--)
{
fputs(p[middle]->data,final);
free(p[middle]);
}
rwidth=0;
fclose(final);
fclose(memry);
}
system("pause");
return 0;
}