亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.cpp

?? 基于BMP圖像的信息隱藏
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
return FALSE; 
} 
} 

*(heap->nextchar)=data; 
heap->heaplen++; 
heap->nextchar++; 

return TRUE; 
} 

/*********************************************************************/ 
/******************************BMP HANDLER ROUTINES*******************/ 

int readBitmapFile(FILE* bmpfile, BITMAP* datazone) { 

unsigned char tmpchar; 
int dataread; 
int i; 
long offsetToRaster=0; 

/* Get Signature */ 
datazone->signature=(char*)calloc(3,sizeof(char)); 
datazone->signature[2]='\0'; 
dataread=fscanf(bmpfile,"%c",&tmpchar); 
if (dataread==1) 
datazone->signature[0]=tmpchar; 
dataread=fscanf(bmpfile,"%c",&tmpchar); 
if (dataread==1) 
datazone->signature[1]=tmpchar; 

/* Get Filesize */ 
datazone->filesize=streamToLong(bmpfile); 

/* Skip reserved section */ 
for (i=0; i< 4; i++) 
dataread=fscanf(bmpfile,"%c",&tmpchar); 

/* Get Raster Offset */ 
offsetToRaster=streamToLong(bmpfile); 

/* Skip size of infoheader (always=40 anyway) */ 
for (i=0; i< 4; i++) 
dataread=fscanf(bmpfile,"%c",&tmpchar); 

/* Get Bitmap width (x_size) */ 
datazone->x_size=streamToLong(bmpfile); 

/* Get Bitmap height (y_size) */ 
datazone->y_size=streamToLong(bmpfile); 

/* Get number bitplanes */ 
dataread=fscanf(bmpfile,"%c",&tmpchar); 
if (dataread==1) 
datazone->bitplanes=((unsigned int)tmpchar*1); 
dataread=fscanf(bmpfile,"%c",&tmpchar); 
if (dataread==1) 
datazone->bitplanes+=((unsigned int)tmpchar*256); 

/* Get bits per pixel */ 
dataread=fscanf(bmpfile,"%c",&tmpchar); 
if (dataread==1) 
datazone->bpp=((unsigned int)tmpchar*1); 
dataread=fscanf(bmpfile,"%c",&tmpchar); 
if (dataread==1) 
datazone->bpp+=((unsigned int)tmpchar*256); 

/* Get Compression */ 
datazone->compression=streamToLong(bmpfile); 

/* Get Compressed Image Size */ 
datazone->compresssize=streamToLong(bmpfile); 

/* Get X pix per metre */ 
datazone->x_pix_per_metre=streamToLong(bmpfile); 

/* Get Y pix per metre */ 
datazone->y_pix_per_metre=streamToLong(bmpfile); 

/* Get Colours Used */ 
datazone->colours=streamToLong(bmpfile); 

/* Get num important colours*/ 
datazone->cols_important=streamToLong(bmpfile); 

if (datazone->bpp<=8) 
{ 
int numcolors=0; 
switch(datazone->bpp) { 
case 1: numcolors=1; 
case 4: numcolors=16; 
case 8: numcolors=256; 
} 
for (i=0; i<numcolors; i++) { 
unsigned char readchar; 
/* RED */ 
if (fscanf(bmpfile,"%c",&readchar) >0) { 
if (!putToHeap(readchar,datazone->palette)) 
return FALSE; 
} 
/* GREEN */ 
if (fscanf(bmpfile,"%c",&readchar) >0) { 
if (!putToHeap(readchar,datazone->palette)) 
return FALSE; 
} 
/* BLUE */ 
if (fscanf(bmpfile,"%c",&readchar) >0) { 
if (!putToHeap(readchar,datazone->palette)) 
return FALSE; 
} 
/* RESERVED */ 
if (fscanf(bmpfile,"%c",&readchar) >0) { 
if (!putToHeap(readchar,datazone->palette)) 
return FALSE; 
} 
} 
} 


if (fseek(bmpfile,offsetToRaster,SEEK_SET)==0) 
if(!streamFileToHeap(bmpfile,datazone->raster)) 
return FALSE; 

return TRUE;} 

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++; 
} 
} 


/*********************************************************************/ 
/**************************** ENCODE FUNCTIONS ***********************/ 
unsigned long int resolveMaxEncode(BITMAP* bmp, LOOKUP* store) { 
/* return maximum possible storage space in BMP */ 

unsigned long storage; 
unsigned long offset,tmp; 
unsigned char thisR; 
unsigned char thisG; 
unsigned char thisB; 
unsigned char lookaheadR; 
unsigned char lookaheadG; 
unsigned char lookaheadB; 
int dom,lookaheaddom; 
int keepflag,keepflag2; 
unsigned long int hits; 
PIXEL getdata, corrupta; 
unsigned long int longtmp; 
unsigned long int longtmp2; 
unsigned long int *longptrtmp; 

offset=0; 
storage=0; /* running total */ 

while (offset<(bmp->x_size*bmp->y_size)) { 
getdata=getIndexedPixel(offset, bmp); 
thisR=getdata.red; 
thisG=getdata.green; 
thisB=getdata.blue; 

dom=biggest_of_3(thisR,thisG,thisB); 
keepflag=FALSE; 

/* If 1 col varies from others by at least 3 = > candidate */ 
if (dom==thisG && abs(thisG-thisR) >2 && abs(thisG-thisB) >2) 
keepflag=TRUE; 
if (dom==thisB && abs(thisB-thisR) >2 && abs(thisB-thisG) >2) 
keepflag=TRUE; 
if (dom==thisR && abs(thisR-thisB) >2 && abs(thisR-thisG) >2) 
keepflag=TRUE; 
if (keepflag==FALSE) { 
offset++; 
continue; 
} 

/* only one of the 3 cols=dom here, and that col is at least 
3 points greater than the others */ 

/* see if dominant col continues on more pixels + that other 
cols dont challenge its dominance */ 

tmp=offset+1; 
hits=1; 
while (tmp<(bmp->x_size*bmp->y_size)) { 
getdata=getIndexedPixel(tmp, bmp); 
lookaheadR=getdata.red; 
lookaheadG=getdata.green; 
lookaheadB=getdata.blue; 
keepflag=FALSE; 
if (dom==thisG && lookaheadG==thisG) 
keepflag=TRUE; 
if (dom==thisR && lookaheadR==thisR) 
keepflag=TRUE; 
if (dom==thisB && lookaheadB==thisB) 
keepflag=TRUE; 

/* check dom is still dominant col by at least 4 */ 
lookaheaddom=biggest_of_3(lookaheadR,lookaheadG,lookaheadB); 
keepflag2=FALSE; 
if (thisR==dom && lookaheadR==lookaheaddom && abs(lookaheadR-lookaheadG) >2 && abs(lookaheadR-lookaheadB) >2) 
keepflag2=TRUE; 
if (thisG==dom && lookaheadG==lookaheaddom && abs(lookaheadG-lookaheadR) >2 && abs(lookaheadG-lookaheadB) >2) 
keepflag2=TRUE; 
if (thisB==dom && lookaheadB==lookaheaddom && abs(lookaheadB-lookaheadR) >2 && abs(lookaheadB-lookaheadG) >2) 
keepflag2=TRUE; 

if (keepflag==FALSE || keepflag2==FALSE) { 
/* make this byte (that broke chain) much 
different to running colour byte to prevent decode confusion */ 
if (thisR==dom && lookaheadR!=thisR && abs(thisR-lookaheadR)< 3) { 
/* chain was red, and broke with a minor difference*/ 
corrupta.blue=lookaheadB; 
corrupta.green=lookaheadG; 
if (lookaheadR >thisR) { 
if (lookaheadR< 253) 
corrupta.red=lookaheadR+3; 
else 
corrupta.red=lookaheadR-6; 
} 
else { 
if (lookaheadR< 253) 
corrupta.red=lookaheadR-3; 
else 
corrupta.red=lookaheadR-6; 
} 
setIndexedPixel(tmp,bmp,corrupta); 

} 
else if (thisG==dom && lookaheadG!=thisG && abs(thisG-lookaheadG)< 3) { 
/* chain was green and broke with minor diff*/ 
corrupta.red=lookaheadR; 
corrupta.blue=lookaheadB; 
if (lookaheadG >thisG) { 
if (lookaheadG< 253) 
corrupta.green=lookaheadG+3; 
else 
corrupta.green=lookaheadG-6; 
} 
else { 
if (lookaheadG< 253) 
corrupta.green=lookaheadG-3; 
else 
corrupta.green=lookaheadG-6; 
} 
setIndexedPixel(tmp,bmp,corrupta); 
} 
else if (thisB==dom && lookaheadB!=thisB && abs(thisB-lookaheadB)< 3) { 
/* chain was blue and broke with minor diff */ 
corrupta.green=lookaheadG; 
corrupta.red=lookaheadR; 
if (lookaheadB >thisB) { 
if (lookaheadB< 253) 
corrupta.blue=lookaheadB+3; 
else 
corrupta.blue=lookaheadB-6; 
} 
else { 
if (lookaheadB< 253) 
corrupta.blue=lookaheadB-3; 
else 
corrupta.blue=lookaheadB-6; 
} 
setIndexedPixel(tmp,bmp,corrupta); 
} 
break; 
} 
hits++; 
tmp++; 
} 

if (hits >2) { 
storage+=(hits-2); 
/* store in lookup table */ 
for (longtmp=offset+2; longtmp< offset+hits; longtmp++) { 
if (store->curitem >=store->currentlen) { 
longptrtmp=store->dataspace; 
store->dataspace=(unsigned long int*)calloc(2*store->currentlen,sizeof(unsigned long int)); 
for (longtmp2=0; longtmp2< store->currentlen; longtmp2++) { 
*(store->dataspace+longtmp2)=*(longptrtmp+longtmp2); 
} 
free (longptrtmp); 
longptrtmp=NULL; 
store->currentlen*=2; 
} 
*(store->dataspace+(store->curitem++))=longtmp; 
} 
offset+=hits; 
} 
else { 
offset++; 
} 
} 

return (unsigned long)(storage/8); 
} 

unsigned int biggest_of_3 (unsigned int a, unsigned int b, unsigned int c) { 
int pr1,pr2; 
if (a >b) 
pr1=a; 
else 
pr1=b; 
if (b >c) 
pr2=b; 
else 
pr2=c; 
if (pr1 >pr2) 
return pr1; 
else 
return pr2; 
} 


/*********************************************************************/ 
void longToStream(FILE* strm, unsigned long int x) { 
unsigned int bit4,bit3,bit2,bit1; 

bit4=(unsigned int)x/16777216; 
x=x-(unsigned long)((unsigned long)bit4*16777216); 
bit3=(unsigned int)x/65536; 
x=x-(unsigned long)((unsigned long)bit3*65536); 
bit2=(unsigned int)x/256; 
x=x-(unsigned long)((unsigned long)bit2*256); 
bit1=(unsigned int)x; 

fprintf(strm,"%c%c%c%c",bit1,bit2,bit3,bit4); 
} 

unsigned long int streamToLong(FILE* strm) { 
unsigned char dataread; 
unsigned char tmpchar; 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲影视在线播放| 蜜臀av性久久久久蜜臀av麻豆| 高清不卡一二三区| 精品日产卡一卡二卡麻豆| 日本欧美一区二区| 9191成人精品久久| 亚洲不卡在线观看| 欧美日韩精品三区| 婷婷久久综合九色国产成人| 在线观看网站黄不卡| 亚洲黄网站在线观看| 91久久久免费一区二区| 亚洲免费伊人电影| 欧美视频精品在线| 亚洲成人一区二区在线观看| 在线播放/欧美激情| 免费成人美女在线观看.| 欧美成人精品高清在线播放| 国内久久精品视频| 久久久欧美精品sm网站| 国产成人免费av在线| 国产精品午夜春色av| 92精品国产成人观看免费| 亚洲激情图片qvod| 欧美军同video69gay| 青青草国产精品97视觉盛宴 | eeuss鲁片一区二区三区| 综合在线观看色| 91福利小视频| 丝袜美腿成人在线| 日韩精品一区二区三区中文不卡 | 成人黄色小视频| 亚洲欧美视频在线观看视频| 欧美最猛黑人xxxxx猛交| 视频一区二区中文字幕| 亚洲精品在线电影| 成人a级免费电影| 亚洲一区二区不卡免费| 91精品国产综合久久久久久| 极品美女销魂一区二区三区| 国产精品视频一区二区三区不卡| 一本色道久久综合亚洲aⅴ蜜桃| av电影天堂一区二区在线| 亚洲精品国产一区二区精华液 | 欧美日韩国产在线观看| 麻豆精品精品国产自在97香蕉| 国产视频一区在线播放| av亚洲精华国产精华精| 亚洲图片欧美色图| 精品奇米国产一区二区三区| 成人黄色国产精品网站大全在线免费观看 | 在线观看视频一区二区欧美日韩| 蜜臀av一区二区在线免费观看 | 国产亚洲va综合人人澡精品| 99国内精品久久| 视频一区欧美精品| 国产日韩精品一区二区三区| 91黄视频在线观看| 激情小说亚洲一区| 一区二区三区在线看| 日韩久久免费av| 92精品国产成人观看免费| 日韩精品一级中文字幕精品视频免费观看| 久久日韩粉嫩一区二区三区| 色偷偷一区二区三区| 精品夜夜嗨av一区二区三区| 亚洲人成网站精品片在线观看| 欧美一区二区免费| caoporn国产一区二区| 蜜桃视频一区二区| 亚洲精品国产高清久久伦理二区| 欧美成人a视频| 91福利小视频| 成人免费毛片嘿嘿连载视频| 男男视频亚洲欧美| 亚洲美女免费在线| 国产香蕉久久精品综合网| 欧美午夜精品电影| 丁香另类激情小说| 美女www一区二区| 亚洲精品自拍动漫在线| 久久精品日韩一区二区三区| 欧美绝品在线观看成人午夜影视| 99国产精品视频免费观看| 久久99精品久久久久婷婷| 夜夜嗨av一区二区三区 | 欧美成va人片在线观看| 欧美这里有精品| 波波电影院一区二区三区| 美女脱光内衣内裤视频久久网站| 一区二区三区在线高清| 国产三级精品三级| 日韩你懂的电影在线观看| 欧美视频在线一区二区三区 | 国产99久久久国产精品免费看 | 成人蜜臀av电影| 久久国产尿小便嘘嘘尿| 午夜视频一区二区| 亚洲欧美日韩国产综合在线| 欧美国产在线观看| 欧美va亚洲va国产综合| 欧美肥妇毛茸茸| 欧美日韩中文国产| 色婷婷av一区二区三区大白胸| 国产成a人无v码亚洲福利| 精品在线播放免费| 免费在线观看精品| 日韩国产精品大片| 亚洲v中文字幕| 亚洲国产视频a| 亚洲激情av在线| 亚洲欧美电影一区二区| 国产精品三级视频| 亚洲国产成人在线| 亚洲国产成人自拍| 欧美国产一区二区| 久久精品人人做| 久久日韩粉嫩一区二区三区| 精品精品欲导航| 日韩女优电影在线观看| 欧美成人午夜电影| 欧美tk丨vk视频| 欧美精品一区二区三区在线| 精品久久久久一区二区国产| 日韩一级高清毛片| 欧美一级欧美一级在线播放| 欧美疯狂做受xxxx富婆| 欧美日本在线看| 91精品国产色综合久久不卡电影| 欧美日韩亚洲综合在线| 欧美日韩一区三区四区| 欧美日韩精品一区视频| 在线播放欧美女士性生活| 欧美一区二区三区喷汁尤物| 91精品国产欧美一区二区| 日韩欧美在线网站| 欧美精品一区男女天堂| 久久久久久97三级| 国产精品欧美一区喷水| 亚洲欧洲韩国日本视频| 亚洲男同1069视频| 亚洲午夜在线观看视频在线| 亚洲香蕉伊在人在线观| 日韩av一区二| 激情六月婷婷综合| 粉嫩嫩av羞羞动漫久久久 | 欧美日韩视频在线一区二区| 777xxx欧美| 精品成人免费观看| 久久久一区二区三区捆绑**| 亚洲国产精品99久久久久久久久| 综合精品久久久| 亚洲一卡二卡三卡四卡无卡久久 | 精品在线一区二区三区| 国产精品羞羞答答xxdd| 成人一区二区三区视频| 91小视频免费看| 欧美日韩国产小视频| 日韩一级免费一区| 国产日本一区二区| 亚洲精品乱码久久久久久黑人| 婷婷久久综合九色综合绿巨人 | 日本系列欧美系列| 黄色日韩三级电影| 不卡视频免费播放| 欧美色精品在线视频| 日韩色在线观看| 中文字幕精品一区二区三区精品| 亚洲色图清纯唯美| 日本在线不卡视频一二三区| 国产一区二区不卡| 91久久免费观看| 2欧美一区二区三区在线观看视频| 日韩一区中文字幕| 日韩国产高清影视| 丁香激情综合五月| 欧美色成人综合| 国产午夜一区二区三区| 夜夜操天天操亚洲| 国产一区二区三区免费在线观看| 99久久精品一区| 91精品国产品国语在线不卡| 国产精品天干天干在观线| 午夜欧美在线一二页| 丁香网亚洲国际| 欧美精品18+| 18欧美亚洲精品| 蜜桃视频免费观看一区| 色综合天天狠狠| 精品久久久久久亚洲综合网| 亚洲色图另类专区| 久久超级碰视频| 色www精品视频在线观看| 精品国产乱码久久久久久久久| 亚洲嫩草精品久久| 国产一区二区三区香蕉| 欧美在线视频全部完| 精品福利一二区| 亚洲成人av一区二区| 成人app在线|