重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你是怎么处理的呢,处理后的数据在哪呢。在数组中吗,还是说直接在原文件上处理了。
10多年品牌的成都网站建设公司,上1000+企业网站设计经验.价格合理,可准确把握网页设计诉求.提供定制网站建设、商城网站建设、小程序设计、响应式网站等服务,我们设计的作品屡获殊荣,是您值得信赖的专业网站建设公司。
另存为,就是用“wb”方式另外创建一个空文件,把这些数据按照BMP的格式写进去。
读取BMP的各个位
将每位的二进制值
转成对应的ascii码值 比如16进制。
举个例子,如果bmp中 是字符串abcd
那么就在文本中存61626364
bmp文件本来就是以二进制存储的.
bmp文件的结构如下:
typedef struct//BMP文件的文件头
{
char bfType[2];
long bfSize;
int bfReserved1;
int bfReserved2;
long bfOffBits;
}BMPHEAD;
typedef struct//点位图信息
{
long biSize;
long biWidth;
long biHeight;
int biPlanes;
int biBitCount;
long biCompress;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
}BMPINFO;
typedef struct//颜色表
{ unsigned char blue;
unsigned char green;
unsigned char red;
unsigned char reaserved;
}RGB;
bmp文件保存时,先存上面的三个结构体的数据,之后是图像数据.具体信息可查相关书籍
给你C++的代码吧呵呵,C的也差不多,稍微修改一下就行了
主要是你要了解BMP文件的结构,就是文件头那里所包含的信息,这里用了BITMAPINFOHEADER等现成的结构体来处理,BMP的文件头百度一下就知道的啦,很多资料
#include
"fstream.h"//24bit
bitmap
bool
CBitmapWindow::LoadFile
(char
*bmpFile)
{
FILE
*fp;
if((fp=fopen(bmpFile,"rb"))==NULL)
return
false;
WORD
bfType;
DWORD
bfSize;
WORD
bfReserved1;
WORD
bfReserved2;
DWORD
bfOffBits;
BITMAPINFOHEADER
bih;
fread(bfType,sizeof(WORD),1,fp);
if(bfType!=0x4d42)
return
false;
fread(bfSize,sizeof(DWORD),1,fp);
fread(bfReserved1,sizeof(WORD),1,fp);
fread(bfReserved2,sizeof(WORD),1,fp);
fread(bfOffBits,sizeof(DWORD),1,fp);
fread(bih,sizeof(BITMAPINFOHEADER1),1,fp);
nWidth=bih.biWidth
;
nHeight=bih.biHeight;
if(nWidth
%
4
!=0)
nWidth=nWidth+
(4-nWidth
%
4);
//修正位图宽度值
DWORD
size=nWidth*bih.biBitCount/8*nHeight;
arrayColor=new
ZafLogicalColor[nWidth*nHeight];
//
LPSTR
pData=new
char[size];
unsigned
char*
pData=new
unsigned
char[size];
fread(pData,size,1,fp);
int
bmWidthBytes=nWidth*bih.biBitCount
/8;
int
bmBitsPixel=bih.biBitCount
;
int
nBit=bmBitsPixel/8;
colorTableBitmap*
clrTableBmp;
clrTableBmp=new
colorTableBitmap[nWidth*nHeight];
char
cBit[40];
int
z;
for
(int
y=0;ynHeight;y++)
{
for
(int
x=0;xnWidth;x++)
{
z=nHeight-y-1;
clrTableBmp[y*nWidth+x].nIndex
=y*nWidth+x;
clrTableBmp[y*nWidth+x].iBlue
=pData[x*nBit+z*bmWidthBytes];
clrTableBmp[y*nWidth+x].iGreen
=pData[x*nBit+1+z*bmWidthBytes];
clrTableBmp[y*nWidth+x].iRed=pData[x*nBit+2+z*bmWidthBytes];
sprintf(cBit,",%d:%d:%d:%d",y*nWidth+x,pData[x*nBit+z*bmWidthBytes],
pData[x*nBit+1+z*bmWidthBytes],
pData[x*nBit+2+z*bmWidthBytes]);
}
}
delete
[]clrTableBmp;
delete
[]pData;
fclose(fp);
return
true;
}
先解析bmp图像的格式, windows 下面有 API和bmp头结构,bmp头貌似有3个部分, 算出像素数据的偏移量。然后二进制读文件,保存到数组即可。