快讯

在BMP文件中隐藏信息

2004-02-14 09:34  出处:PConline  作者:网上收集  责任编辑:zwg 

void promoteTo24(BITMAP* source, BITMAP* dest) { unsigned long int ctr; unsigned char* tmpptr; unsigned char tmpchar[4]; unsigned char split16_1,split16_2; unsigned int EOLtargetpadding; /*in bits, for 24 target*/ unsigned long int xpos; int i; /* translate */ EOLtargetpadding=calcEOLpad(24,source- >x_size); xpos=0; tmpptr=source- >raster- >dataspace; for (ctr=0; ctr< source- >raster- >heaplen; ctr+=4) { switch(source- >bpp) { case 4: /* 16colour */ for (i=0; i< 4; i++) tmpchar[i]=*(tmpptr++); for (i=0; i< 4; i++) { split16_1=tmpchar[i]; split16_2=tmpchar[i]; split16_1=(split16_1&0xf0) > >4; split16_2=split16_2&0xf; if (xpos< source- >x_size) { process24gotpixel(split16_1,source- >palette- >dataspace,dest- >raster); xpos++; } if (xpos< source- >x_size) { process24gotpixel(split16_2,source- >palette- >dataspace,dest- >raster); xpos++; } } break; case 8: /* 256 cols */ for (i=0; i< 4; i++) { tmpchar[i]=*(tmpptr++); } for (i=0; i< 4; i++) { if (xpos< source- >x_size) { process24gotpixel(tmpchar[i],source- >palette- >dataspace,dest- >raster); xpos++; } } break; } if (xpos==source- >x_size) { /* align on source */ xpos=0; /* align on 24bit target */ for (i=0; i< EOLtargetpadding; i++) putToHeap('\0',dest- >raster); } } /* sort header info out */ dest- >signature=(char*)calloc(3,sizeof(char)); dest- >signature[0]='B'; dest- >signature[1]='M'; dest- >signature[2]='\0'; dest- >compression=0; dest- >x_pix_per_metre=source- >x_pix_per_metre; dest- >y_pix_per_metre=source- >y_pix_per_metre; dest- >bitplanes=1; dest- >bpp=24; dest- >x_size=source- >x_size; dest- >y_size=source- >y_size; dest- >colours=0; dest- >cols_important=0; /*file sizes */ dest- >compresssize=dest- >raster- >heaplen; dest- >filesize=54+(dest- >compresssize); } void process24gotpixel(unsigned char pal, unsigned char* palette, HEAP* raster) { /* got pixel palette entry# PAL */ palette+=(unsigned int)pal*4; putToHeap(*palette,raster); putToHeap(*(palette+1),raster); putToHeap(*(palette+2),raster); } void writeBitmapFile(FILE* outfile, BITMAP* source) { unsigned char* curspace=NULL; unsigned long int ctr; fprintf(outfile,"%c%c",source- >signature[0],source- >signature[1]); longToStream(outfile,source- >filesize); longToStream(outfile,0); longToStream(outfile,54); longToStream(outfile,40); longToStream(outfile,source- >x_size); longToStream(outfile,source- >y_size); fprintf(outfile,"%c%c%c%c",1,0,24,0); longToStream(outfile,source- >compression); longToStream(outfile,source- >compresssize); longToStream(outfile,source- >x_pix_per_metre); longToStream(outfile,source- >y_pix_per_metre); longToStream(outfile,0); longToStream(outfile,0); /* stream out dataspace */ ctr=0; curspace=(source- >raster- >dataspace); while (ctr< source- >raster- >heaplen) { fprintf(outfile,"%c",*(curspace++)); ctr++; } }
键盘也能翻页,试试“← →”键
IT热词搜索 来源:360新闻
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载