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

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

?? jpegbianma.txt

?? 這是一個簡單的jpeg編碼程序
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
{
DHT.huffCode = STD_AC_UV_NRCODES[i + 1];
}
fwrite(&DHT,sizeof(DHT),1,this->pOutFile); 
for (i = 0; i <= 161; i++)
{
WriteByte(STD_AC_UV_VALUES); 
} 
}

//寫入SOS段
void WriteSOS(void)
{
JPEGSOS_24BITS SOS;
SOS.segmentTag = 0xDAFF;
SOS.length = 0x0C00;
SOS.sigNum = 0x03;
SOS.YID = 0x01;
SOS.HTY = 0x00;
SOS.UID = 0x02;
SOS.HTU = 0x11;
SOS.VID = 0x03;
SOS.HTV = 0x11;
SOS.Se = 0x3F;
SOS.Ss = 0x00;
SOS.Bf = 0x00;
fwrite(&SOS,sizeof(SOS),1,this->pOutFile); 
}
//寫入文件結束標記
void WriteEOI(void)
{
fwrite(&EOITAG,sizeof(EOITAG),1,this->pOutFile);
}

// 將高8位和低8位交換
USHORT Intel2Moto(USHORT val)
{
BYTE highBits = BYTE(val / 256);
BYTE lowBits = BYTE(val % 256);

return lowBits * 256 + highBits;
}

//寫1字節到文件
void WriteByte(BYTE val)
{ 
fwrite(&val,sizeof(val),1,this->pOutFile);
}

// 生成標準Huffman表
void BuildSTDHuffTab(BYTE* nrcodes,BYTE* stdTab,HUFFCODE* huffCode)
{
BYTE i = 0; //臨時變量
BYTE j = 0;
BYTE k = 0;
USHORT code = 0; 

for (i = 1; i <= 16; i++)
{ 
for (j = 1; j <= nrcodes; j++)
{ 
huffCode[stdTab[k]].code = code;
huffCode[stdTab[k]].length = i;
++k;
++code;
}
code*=2;
} 

for (i = 0; i < k; i++)
{
huffCode.val = stdTab; 
}
}

// 處理DU(數據單元)
void ProcessDU(FLOAT* lpBuf,FLOAT* quantTab,HUFFCODE* dcHuffTab,HUFFCODE* acHuffTab,SHORT* DC)
{
BYTE i = 0; //臨時變量
UINT j = 0;
SHORT diffVal = 0; //DC差異值 
BYTE acLen = 0; //熵編碼后AC中間符號的數量
SHORT sigBuf[DCTBLOCKSIZE]; //量化后信號緩沖
ACSYM acSym[DCTBLOCKSIZE]; //AC中間符號緩沖 

FDCT(lpBuf); //離散余弦變換

for (i = 0; i < DCTBLOCKSIZE; i++) //量化操作
{ 
sigBuf[FZBT] = (lpBuf * quantTab + 16384.5) - 16384; 
}
//-----------------------------------------------------
//對DC信號編碼,寫入文件
//DPCM編碼 
diffVal = sigBuf[0] - *DC;
*DC = sigBuf[0];
//搜索Huffman表,寫入相應的碼字
if (diffVal == 0)
{ 
WriteBits(dcHuffTab[0]); 
}
else
{ 
WriteBits(dcHuffTab[pVLITAB[diffVal]]); 
WriteBits(BuildSym2(diffVal)); 
}
//-------------------------------------------------------
//對AC信號編碼并寫入文件
for (i = 63; (i > 0) && (sigBuf == 0); i--) //判斷ac信號是否全為0
{
//注意,空循環
}
if (i == 0) //如果全為0
{
WriteBits(acHuffTab[0x00]); //寫入塊結束標記 
}
else
{ 
RLEComp(sigBuf,&acSym[0],acLen); //對AC運行長度編碼 
for (j = 0; j < acLen; j++) //依次對AC中間符號Huffman編碼
{ 
if (acSym[j].codeLen == 0) //是否有連續16個0
{ 
WriteBits(acHuffTab[0xF0]); //寫入(15,0) 
}
else
{
WriteBits(acHuffTab[acSym[j].zeroLen * 16 + acSym[j].codeLen]); //
WriteBits(BuildSym2(acSym[j].amplitude)); 
} 
}
if (i != 63) //如果最后位以0結束就寫入EOB
{
WriteBits(acHuffTab[0x00]); 
}
}
}

//********************************************************** **********
// 方法名稱:ProcessData 
//
// 方法說明:處理圖像數據FDCT-QUANT-HUFFMAN
//
// 參數說明:
// lpYBuf:亮度Y信號輸入緩沖
// lpUBuf:色差U信號輸入緩沖
// lpVBuf:色差V信號輸入緩沖
//********************************************************** **********
void ProcessData(BYTE* lpYBuf,BYTE* lpUBuf,BYTE* lpVBuf)
{ 
size_t yBufLen = _msize(lpYBuf); //亮度Y緩沖長度
size_t uBufLen = _msize(lpUBuf); //色差U緩沖長度 
size_t vBufLen = _msize(lpVBuf); //色差V緩沖長度
FLOAT dctYBuf[DCTBLOCKSIZE]; //Y信號FDCT編碼臨時緩沖
FLOAT dctUBuf[DCTBLOCKSIZE]; //U信號FDCT編碼臨時緩沖 
FLOAT dctVBuf[DCTBLOCKSIZE]; //V信號FDCT編碼臨時緩沖 
UINT mcuNum = 0; //存放MCU的數量 
SHORT yDC = 0; //Y信號的當前塊的DC
SHORT uDC = 0; //U信號的當前塊的DC
SHORT vDC = 0; //V信號的當前塊的DC 
BYTE yCounter = 0; //YUV信號各自的寫入計數器
BYTE uCounter = 0;
BYTE vCounter = 0;
UINT i = 0; //臨時變量 
UINT j = 0; 
UINT k = 0;
UINT p = 0;
UINT m = 0;
UINT n = 0;
UINT s = 0; 

mcuNum = (this->buffHeight * this->buffWidth * 3)
/ (DCTBLOCKSIZE * 3); //計算MCU的數量

for (p = 0;p < mcuNum; p++) //依次生成MCU并寫入
{
yCounter = 1;//MCUIndex[SamplingType][0]; //按采樣方式初始化各信號計數器
uCounter = 1;//MCUIndex[SamplingType][1];
vCounter = 1;//MCUIndex[SamplingType][2];

for (; i < yBufLen; i += DCTBLOCKSIZE)
{
for (j = 0; j < DCTBLOCKSIZE; j++)
{
dctYBuf[j] = FLOAT(lpYBuf[i + j] - 128);
} 
if (yCounter > 0)
{ 
--yCounter;
ProcessDU(dctYBuf,YQT_DCT,STD_DC_Y_HT,STD_AC_Y_HT,&yDC); 
}
else
{
break;
}
} 
//---------------------------------------------------------- -------- 
for (; m < uBufLen; m += DCTBLOCKSIZE)
{
for (n = 0; n < DCTBLOCKSIZE; n++)
{
dctUBuf[n] = FLOAT(lpUBuf[m + n] - 128);
} 
if (uCounter > 0)
{ 
--uCounter;
ProcessDU(dctUBuf,UVQT_DCT,STD_DC_UV_HT,STD_AC_UV_HT,&uD C); 
}
else
{
break;
}
} 
//---------------------------------------------------------- --------- 
for (; s < vBufLen; s += DCTBLOCKSIZE)
{
for (k = 0; k < DCTBLOCKSIZE; k++)
{
dctVBuf[k] = FLOAT(lpVBuf[s + k] - 128);
}
if (vCounter > 0)
{
--vCounter;
ProcessDU(dctVBuf,UVQT_DCT,STD_DC_UV_HT,STD_AC_UV_HT,&vD C); 
}
else
{
break;
}
} 
} 
}

// 8x8的浮點離散余弦變換
void FDCT(FLOAT* lpBuff)
{
FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
FLOAT tmp10, tmp11, tmp12, tmp13;
FLOAT z1, z2, z3, z4, z5, z11, z13;
FLOAT* dataptr;
int ctr;

/* 第一部分,對行進行計算 */
dataptr = lpBuff;
for (ctr = DCTSIZE-1; ctr >= 0; ctr--)
{
tmp0 = dataptr[0] + dataptr[7];
tmp7 = dataptr[0] - dataptr[7];
tmp1 = dataptr[1] + dataptr[6];
tmp6 = dataptr[1] - dataptr[6];
tmp2 = dataptr[2] + dataptr[5];
tmp5 = dataptr[2] - dataptr[5];
tmp3 = dataptr[3] + dataptr[4];
tmp4 = dataptr[3] - dataptr[4];

/* 對偶數項進行運算 */ 
tmp10 = tmp0 + tmp3; /* phase 2 */
tmp13 = tmp0 - tmp3;
tmp11 = tmp1 + tmp2;
tmp12 = tmp1 - tmp2;

dataptr[0] = tmp10 + tmp11; /* phase 3 */
dataptr[4] = tmp10 - tmp11;

z1 = (tmp12 + tmp13) * (0.707106781); /* c4 */
dataptr[2] = tmp13 + z1; /* phase 5 */
dataptr[6] = tmp13 - z1;

/* 對奇數項進行計算 */
tmp10 = tmp4 + tmp5; /* phase 2 */
tmp11 = tmp5 + tmp6;
tmp12 = tmp6 + tmp7;

z5 = (tmp10 - tmp12) * ( 0.382683433); /* c6 */
z2 = (0.541196100) * tmp10 + z5; /* c2-c6 */
z4 = (1.306562965) * tmp12 + z5; /* c2+c6 */
z3 = tmp11 * (0.707106781); /* c4 */

z11 = tmp7 + z3; /* phase 5 */
z13 = tmp7 - z3;

dataptr[5] = z13 + z2; /* phase 6 */
dataptr[3] = z13 - z2;
dataptr[1] = z11 + z4;
dataptr[7] = z11 - z4;

dataptr += DCTSIZE; /* 將指針指向下一行 */
}

/* 第二部分,對列進行計算 */
dataptr = lpBuff;
for (ctr = DCTSIZE-1; ctr >= 0; ctr--)
{
tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];

/* 對偶數項進行運算 */ 
tmp10 = tmp0 + tmp3; /* phase 2 */
tmp13 = tmp0 - tmp3;
tmp11 = tmp1 + tmp2;
tmp12 = tmp1 - tmp2;

dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
dataptr[DCTSIZE*4] = tmp10 - tmp11;

z1 = (tmp12 + tmp13) * (0.707106781); /* c4 */
dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
dataptr[DCTSIZE*6] = tmp13 - z1;

/* 對奇數項進行計算 */
tmp10 = tmp4 + tmp5; /* phase 2 */
tmp11 = tmp5 + tmp6;
tmp12 = tmp6 + tmp7;

z5 = (tmp10 - tmp12) * (0.382683433); /* c6 */
z2 = (0.541196100) * tmp10 + z5; /* c2-c6 */
z4 = (1.306562965) * tmp12 + z5; /* c2+c6 */
z3 = tmp11 * (0.707106781); /* c4 */

z11 = tmp7 + z3; /* phase 5 */
z13 = tmp7 - z3;

dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
dataptr[DCTSIZE*3] = z13 - z2;
dataptr[DCTSIZE*1] = z11 + z4;
dataptr[DCTSIZE*7] = z11 - z4;

++dataptr; /* 將指針指向下一列 */
}
}

//********************************************************** **********
// 方法名稱:WriteBits 
//
// 方法說明:寫入二進制流
//
// 參數說明:
// value:AC/DC信號的振幅
//********************************************************** **********
void WriteBits(HUFFCODE huffCode)
{ 
WriteBitsStream(huffCode.code,huffCode.length); 
}
void WriteBits(SYM2 sym)
{
WriteBitsStream(sym.amplitude,sym.codeLen); 
}

//********************************************************** **********
// 方法名稱:WriteBitsStream 
//
// 方法說明:寫入二進制流
//
// 參數說明:
// value:需要寫入的值
// codeLen:二進制長度
//********************************************************** **********
void WriteBitsStream(USHORT value,BYTE codeLen)
{ 
CHAR posval;//bit position in the bitstring we read, should be<=15 and >=0 
posval=codeLen-1;
while (posval>=0)
{
if (value & mask[posval])
{
bytenew|=mask[bytepos];
}
posval--;bytepos--;
if (bytepos<0) 
{ 
if (bytenew==0xFF)
{
WriteByte(0xFF);
WriteByte(0);
}
else
{
WriteByte(bytenew);
}
bytepos=7;bytenew=0;
}
}
}

//********************************************************** **********
// 方法名稱:RLEComp 
//
// 方法說明:使用RLE算法對AC壓縮,假設輸入數據1,0,0,0,3,0,5 
// 輸出為(0,1)(3,3)(1,5),左位表示右位數據前0的個數
// 左位用4bits表示,0的個數超過表示范圍則輸出為(15,0)
// 其余的0數據在下一個符號中表示.
//
// 參數說明:
// lpbuf:輸入緩沖,8x8變換信號緩沖
// lpOutBuf:輸出緩沖,結構數組,結構信息見頭文件
// resultLen:輸出緩沖長度,即編碼后符號的數量
//********************************************************** **********
void RLEComp(SHORT* lpbuf,ACSYM* lpOutBuf,BYTE &resultLen)
{ 
BYTE zeroNum = 0; //0行程計數器
UINT EOBPos = 0; //EOB出現位置 
const BYTE MAXZEROLEN = 15; //最大0行程
UINT i = 0; //臨時變量
UINT j = 0;

EOBPos = DCTBLOCKSIZE - 1; //設置起始位置,從最后一個信號開始
for (i = EOBPos; i > 0; i--) //從最后的AC信號數0的個數
{
if (lpbuf == 0) //判斷數據是否為0
{
--EOBPos; //向前一位
}
else //遇到非0,跳出
{
break; 
}
}

for (i = 1; i <= EOBPos; i++) //從第二個信號,即AC信號開始編碼
{
if (lpbuf == 0 && zeroNum < MAXZEROLEN) //如果信號為0并連續長度小于15
{
++zeroNum; 
}
else
{ 
lpOutBuf[j].zeroLen = zeroNum; //0行程(連續長度)
lpOutBuf[j].codeLen = ComputeVLI(lpbuf); //幅度編碼長度
lpOutBuf[j].amplitude = lpbuf; //振幅 
zeroNum = 0; //0計數器復位
++resultLen; //符號數量++
++j; //符號計數
}
} 
}

//********************************************************** **********
// 方法名稱:BuildSym2 
//
// 方法說明:將信號的振幅VLI編碼,返回編碼長度和信號振幅的反碼

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜视频在线| 久久免费视频一区| 播五月开心婷婷综合| 久久99精品久久久久久久久久久久| 午夜精品aaa| 午夜成人免费电影| 免费观看在线综合| 精品在线观看视频| 丰满放荡岳乱妇91ww| 99re亚洲国产精品| 欧美视频一区二区三区在线观看 | 欧美在线你懂的| 在线观看91视频| 91精品国产91综合久久蜜臀| 欧美一区二区三区免费在线看| 欧美不卡视频一区| 中文字幕二三区不卡| 亚洲日本一区二区| 婷婷综合久久一区二区三区| 黄页网站大全一区二区| 成人福利视频在线| 欧美亚洲日本一区| 久久这里只有精品6| 中文字幕一区二区三区乱码在线 | 亚洲最大成人综合| 美腿丝袜亚洲色图| 99久久国产免费看| 欧美一区二区三区免费在线看| 久久亚区不卡日本| 亚洲主播在线播放| 久久精品国产成人一区二区三区 | 日韩一二三区视频| 国产精品丝袜一区| 五月激情综合婷婷| 成人午夜短视频| 欧美电影在线免费观看| 欧美激情综合网| 午夜精品久久久久久| 成人免费av网站| 3751色影院一区二区三区| 中文一区一区三区高中清不卡| 亚洲午夜激情网站| 粉嫩13p一区二区三区| 91麻豆精品国产自产在线观看一区 | 成人黄色一级视频| 日韩亚洲欧美综合| 一区二区三区资源| 成人精品国产福利| 精品国产乱码久久久久久蜜臀| 亚洲精品视频在线看| 国产一区二区精品久久| 制服丝袜成人动漫| 夜夜精品视频一区二区 | 欧美午夜宅男影院| 国产精品久久夜| 韩日精品视频一区| 777精品伊人久久久久大香线蕉| 中文字幕一区av| 成人在线视频一区二区| 精品国产污污免费网站入口| 日日夜夜精品视频天天综合网| 91在线无精精品入口| 久久综合色天天久久综合图片| 首页国产丝袜综合| 欧美色综合久久| 有码一区二区三区| 91浏览器在线视频| 18成人在线观看| 99麻豆久久久国产精品免费 | 成人国产精品视频| 国产精品无人区| 成人午夜在线播放| 中文欧美字幕免费| 成人激情综合网站| 国产精品电影院| 91丝袜美女网| 亚洲综合999| 666欧美在线视频| 人人精品人人爱| 精品国产一区二区三区av性色| 麻豆freexxxx性91精品| 久久综合资源网| 国产高清一区日本| **网站欧美大片在线观看| 91小宝寻花一区二区三区| 亚洲激情av在线| 在线播放91灌醉迷j高跟美女| 五月天婷婷综合| 欧美成人精品二区三区99精品| 精品一区二区三区免费视频| 精品少妇一区二区三区在线视频| 国产在线精品免费| 中文字幕不卡的av| 欧美丝袜自拍制服另类| 美女视频免费一区| 日本一区二区电影| 色94色欧美sute亚洲线路二 | 日韩三级在线观看| 国产成人av一区| 亚洲精品视频一区二区| 91麻豆精品国产91久久久使用方法| 久久精品国产亚洲a| 中文无字幕一区二区三区| 色综合久久综合网97色综合| 日韩精品电影一区亚洲| 亚洲精品一区二区三区99| av在线不卡免费看| 日日摸夜夜添夜夜添精品视频| 26uuu国产在线精品一区二区| 99久久伊人精品| 美女国产一区二区| 日韩码欧中文字| 日韩欧美国产综合| 91蜜桃在线免费视频| 蜜桃久久av一区| 亚洲一区二区视频在线观看| 精品国产精品网麻豆系列| 91福利在线导航| 国产一区二区调教| 亚洲第一福利视频在线| 欧美国产丝袜视频| 日韩欧美中文字幕一区| 91麻豆国产自产在线观看| 韩国三级在线一区| 亚洲国产综合视频在线观看| 国产亚洲婷婷免费| 欧美一区二区视频在线观看 | 天堂影院一区二区| 亚洲人成亚洲人成在线观看图片| 日韩三级精品电影久久久 | 亚洲激情五月婷婷| 国产欧美日韩在线看| 欧美电影免费观看完整版| 欧美综合一区二区三区| 成人网在线播放| 国产福利一区二区三区视频| 蜜桃视频在线观看一区| 久久精品国内一区二区三区| 亚洲蜜臀av乱码久久精品| 国产欧美一区二区精品仙草咪| 91精品国产综合久久久久久久| 91搞黄在线观看| 色系网站成人免费| 97精品国产露脸对白| a在线欧美一区| 成人av资源在线观看| 国产高清在线精品| 国产91精品入口| 国产福利91精品| 国产成人精品www牛牛影视| 国产麻豆精品在线观看| 国产一区福利在线| 国产精品一二三| 国模套图日韩精品一区二区| 久久99精品国产| 国产不卡在线播放| 国产91在线观看| 99热这里都是精品| 日本韩国精品在线| 欧美午夜精品一区| 7777精品伊人久久久大香线蕉完整版 | 成人av高清在线| av激情亚洲男人天堂| www.爱久久.com| 在线视频综合导航| 69堂精品视频| 欧美精品一区二区三区蜜臀| 欧美精品一区二区三区蜜桃视频| 精品国产一区二区三区四区四| 精品成人一区二区三区| 国产精品婷婷午夜在线观看| 国产精品久久久久影院亚瑟 | 国产福利91精品| 色婷婷综合久久久中文字幕| 欧美在线播放高清精品| 欧美一区二区三区在线观看视频| 日韩三级视频在线看| 国产精品水嫩水嫩| 亚洲在线成人精品| 国产制服丝袜一区| 99在线热播精品免费| 91精品免费在线观看| 国产欧美一区二区三区在线看蜜臀 | 国产精品久久久久久久久快鸭| 亚洲男人电影天堂| 麻豆国产欧美日韩综合精品二区| 国产成人免费视频精品含羞草妖精| 99re亚洲国产精品| 精品日韩99亚洲| 一区二区三区四区蜜桃| 激情文学综合插| 在线观看一区二区精品视频| 精品美女在线播放| 一区二区日韩电影| 国产成人精品免费视频网站| 欧美体内she精高潮| 欧美国产视频在线| 久久精品国产99久久6| 日本精品一区二区三区四区的功能| 日韩精品一区二区三区swag|