📄 第9章 图象的压缩编码,jpeg压缩编码标准.mht
字号:
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>LineBytes=3D(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>ImgSize=3D(DWORD)LineBytes*bi.biHeight;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=CC=EE=D0=B4</SPAN><SPAN=20
lang=3DEN-US>BITMAPFILEHEADER</SPAN><SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=CD=B7=D0=C5=CF=A2</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>bf.bfType=3D0x4d42;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>bf.bfSize=3Dsizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+</P>=
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>NumColors*sizeof(RGBQUAD)+ImgSize;</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>bf.bfOffBits=3D(DWORD)(NumColors*sizeof(RGBQUAD)+</P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));</SPAN></=
P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=CE=AA=D0=C2=CD=BC=B7=D6=C5=E4=BB=BA=B3=E5=C7=F8</SPAN></P>=
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>if((hImgData=3DGlobalAlloc(GHND,(DWORD)</P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>(sizeof(BITMAPINFOHEADER)+</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>NumColors*sizeof(RGBQUAD)+ImgSize)))=3D=3DNULL)</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>{</P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN lang=3DEN-US>MessageBox(hWnd,"Error =
alloc=20
memory!","ErrorMessage",</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>MB_OK|MB_ICONEXCLAMATION);</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN> =20
</SPAN> fclose(PCXfp);</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>return FALSE;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>}</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>lpImgData=3D(LPBITMAPINFOHEADER)GlobalLock(hImgData); </P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=BF=BD=B1=B4=CD=B7=D0=C5=CF=A2</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>memcpy(lpImgData,(char *)&bi,sizeof(BITMAPINFOHEADER));</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>lpPtr=3D(char *)lpImgData+sizeof(BITMAPINFOHEADER);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =CB=CE=CC=E5">=CE=AA</SPAN><SPAN =
lang=3DEN-US>256</SPAN><SPAN=20
style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=C9=AB=B5=F7=C9=AB=B0=E5=B7=D6=C5=E4=C4=DA=B4=E6</SPAN></P>=
<P style=3D"LINE-HEIGHT: 18pt"><SPAN> </SPAN> =20
hPal=3DLocalAlloc(LHND,sizeof(LOGPALETTE)+</P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN lang=3DEN-US>NumColors*=20
sizeof(PALETTEENTRY));</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN lang=3DEN-US>pPal =3D(LOGPALETTE=20
*)LocalLock(hPal);</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN> </SPAN> =20
pPal->palNumEntries =3D256;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>pPal->palVersion =3D 0x300;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>for (i =3D 0; i < 256; i++) {</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=B6=C1=C8=A1=B5=F7=C9=AB=B0=E5=D6=D0=B5=C4</SPAN><SPAN=20
lang=3DEN-US>RGB</SPAN><SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=D6=B5</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN> =20
</SPAN> =20
pPal->palPalEntry[i].peRed=3D(BYTE)fgetc(PCXfp);</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>pPal->palPalEntry[i].peGreen=3D(BYTE)fgetc(PCXfp);</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>pPal->palPalEntry[i].peBlue=3D(BYTE)fgetc(PCXfp);</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>pPal->palPalEntry[i].peFlags=3D(BYTE)0;</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>*(lpPtr++)=3D(unsigned char)pPal->palPalEntry[i].peBlue;</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>*(lpPtr++)=3D(unsigned char)pPal->palPalEntry[i].peGreen;</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>*(lpPtr++)=3D(unsigned char)pPal->palPalEntry[i].peRed;</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>*(lpPtr++)=3D0;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>}</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=B2=FA=C9=FA=D0=C2=B5=C4=C2=DF=BC=AD=B5=F7=C9=AB=B0=E5</SPA=
N></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>hPalette=3DCreatePalette(pPal);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>LocalUnlock(hPal);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>LocalFree(hPal);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>hDc=3DGetDC(hWnd);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>if(hPalette){</P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>hPrevPalette=3DSelectPalette(hDc,hPalette,FALSE);</SPAN></P>=
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>RealizePalette(hDc);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>}</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=BD=E2=C2=EB=D0=D0=CB=F9=D5=BC=B5=C4=D7=D6=BD=DA=CA=FD</SPA=
N></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>PcxBytesPerLine=3D(unsigned int)header.bytes_per_line;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=BD=AB=CE=C4=BC=FE=D6=B8=D5=EB=D6=B8=CF=F2=CD=BC=CF=F3=CA=FD=
=BE=DD=B5=C4=BF=AA=CA=BC=B4=A6</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>fseek(PCXfp,(LONG)sizeof(PCXHEAD),SEEK_SET);</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=BB=BA=B3=E5=C7=F8=B4=F3=D0=A1</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>OffBits=3Dbf.bfOffBits-sizeof(BITMAPFILEHEADER);</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN lang=3DEN-US>//BufSize</SPAN><SPAN=20
style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=CE=AA=BB=BA=B3=E5=C7=F8=B4=F3=D0=A1</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>BufSize=3DOffBits+bi.biHeight*LineBytes;</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>for(y=3D0;y<bi.biHeight;y++){</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=D6=B8=CF=F2=D0=C2=CD=BC=D6=D0=CF=E0=D3=A6=B5=C4=CE=BB=D6=C3=
</SPAN></P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>lpPtr=3D(char *)lpImgData+BufSize-LineBytes-y*LineBytes;</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=BD=E2=C2=EB=B8=C3=D0=D0=A3=AC=B7=C5=D4=DA=CA=FD=D7=E9</SPA=
N><SPAN=20
lang=3DEN-US>LineBuffer</SPAN><SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=D6=D0</SPAN></P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>ReadPcxLine(LineBuffer,PCXfp);</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>for(x=3D0;x<bi.biWidth;x++)</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>*(lpPtr++)=3DLineBuffer[x]; //<SPAN=20
style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=BD=AB=B8=C3=D0=D0=B4=E6=B4=A2=B5=BD=CE=BB=CD=BC=CA=FD=BE=DD=
=D6=D0</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>}</P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>//<SPAN style=3D"FONT-FAMILY: =
=CB=CE=CC=E5">=B4=B4=BD=A8=D0=C2=B5=C4=CE=BB=CD=BC</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>hBitmap=3DCreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpImgData,</P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN =
lang=3DEN-US>(LONG)CBM_INIT,</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN =
lang=3DEN-US>(LPSTR)lpImgData+</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>sizeof(BITMAPINFOHEADER)+</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>NumColors*sizeof(RGBQUAD),</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN=20
lang=3DEN-US>(LPBITMAPINFO)lpImgData,</SPAN></P>
<P style=3D"LINE-HEIGHT: 18pt"><SPAN =
lang=3DEN-US>DIB_RGB_COLORS);</SPAN></P>
<P style=3D"LINE-HEIGHT: =
18pt"><SPAN> =20
</SPAN>if(hPalette && hPrevPalette){</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &=
nbsp; =20
</SPAN>SelectPalette(hDc,hPrevPalette,FALSE);</P>
<P=20
style=3D"LINE-HEIGHT: =
18pt"><SPAN> &n
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -