{"id":16905,"date":"2023-08-30T23:15:39","date_gmt":"2023-08-30T15:15:39","guid":{"rendered":"https:\/\/www.bookcard.net\/wordpress\/?p=16905"},"modified":"2023-08-30T23:15:39","modified_gmt":"2023-08-30T15:15:39","slug":"png","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/png\/","title":{"rendered":"\u5716\u6a94-PNG\u89e3\u6790"},"content":{"rendered":"<figure id=\"attachment_16906\" aria-describedby=\"caption-attachment-16906\" style=\"width: 1280px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2023\/08\/PNG.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-16906\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2023\/08\/PNG.jpg\" alt=\"\u5716\u6a94-PNG\u89e3\u6790\" width=\"1280\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2023\/08\/PNG.jpg 1280w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2023\/08\/PNG-300x188.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2023\/08\/PNG-768x480.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-16906\" class=\"wp-caption-text\">\u5716\u6a94-PNG\u89e3\u6790<\/figcaption><\/figure>\n<p>\u820a\u6642\u300e\u6e38\u6232\u7d0b\u7406\u300f\u518d\u7528\u300e.bmp\u683c\u5f0f\u300f, \u5187\u58d3\u7f29\u5373\u4f7f256\u8272\u76e4\u4f9d\u7136\u4f54\u7528\u5409\u9593.<\/p>\n<p>\u300e.PNG\u683c\u5f0f\u300f\u5229<a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_zlib\/\">LZ77<\/a>\u4e14\u5187\u5931\u771f\u58d3\u7e2e. \u4e14\u58d3\u7e2e\u6975\u9ad8, \u914d\u5408256\u8272\u76e4,\u9002\u5b9c\u4f5c\u300e\u6e38\u6232\u7d0b\u7406\u300f.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"170\">\u6578\u64da\u584a<\/td>\n<td width=\"383\">\u6578\u503c<\/td>\n<\/tr>\n<tr>\n<td width=\"170\">PNG\u5716\u6a94\u6a19\u8a8c<\/td>\n<td width=\"383\">0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A<\/td>\n<\/tr>\n<tr>\n<td width=\"170\">\u5716\u6a94\u982d<\/td>\n<td width=\"383\">IHDR<\/td>\n<\/tr>\n<tr>\n<td width=\"170\">\u8c03\u8272\u677f<\/td>\n<td width=\"383\">PLTE<\/td>\n<\/tr>\n<tr>\n<td width=\"170\">\u56fe\u50cf\u6570\u636e<\/td>\n<td width=\"383\">IDAT<\/td>\n<\/tr>\n<tr>\n<td width=\"170\">\u56fe\u50cf\u7ed3\u675f<\/td>\n<td width=\"383\">IEND<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>PNG\u6578\u64da\u584a\u57fa\u672c\u7d50\u6784.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"196\">\u6578\u64da\u584a\u7d50\u6784<\/td>\n<td width=\"182\">size<\/td>\n<td width=\"176\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">LENGTH<\/td>\n<td width=\"182\">\u6574\u65784\u5b57\u7bc0<\/td>\n<td width=\"176\">\u6578\u64da\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">CHUNK TYPE<\/td>\n<td width=\"182\">\u6574\u65784\u5b57\u7bc0<\/td>\n<td width=\"176\">\u985e\u578b\u6a19\u8a18<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">CHUNK DATA<\/td>\n<td width=\"182\">0~2^32\u5b57\u7bc0<\/td>\n<td width=\"176\">\u6578\u64da<\/td>\n<\/tr>\n<tr>\n<td width=\"196\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32<\/a><\/td>\n<td width=\"182\">\u6574\u65784\u5b57\u7bc0<\/td>\n<td width=\"176\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4e24\u5b57\u7bc0\u8086\u5b57\u7bc0\u6578\u64da,\u519a\u8fa6\u95cc\u7528\u300e\u7db2\u7edc\u5b57\u7bc0\u300f\u5b58\u5132,\u9700\u8f49\u300e\u4e3b\u6a5f\u5b57\u7bc0\u300f.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"557\">\u300e\u7db2\u7edc\u5b57\u7bc0\u300f\u8f49\u300e\u4e3b\u6a5f\u5b57\u7bc0\u300f<\/td>\n<\/tr>\n<tr>\n<td width=\"557\">#define\u00a0 PNG_VALUE32(v)\u00a0 ((v &amp; 0xff000000) &gt;&gt; 24 | (v &amp; 0x00ff0000) &gt;&gt; 8 | (v &amp; 0x0000ff00) &lt;&lt; 8 | (v &amp; 0x000000ff) &lt;&lt; 24)<\/td>\n<\/tr>\n<tr>\n<td width=\"557\">#define\u00a0 PNG_VALUE16(v)\u00a0 ((v &amp; 0xff00) &gt;&gt; 8 | (v &amp; 0x00ff) &lt;&lt; 8)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6e38\u6232\u5f15\u64ce\u9700\u8b80PNG \u4f0d\u500b\u6578\u64da\u584a<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">PNG\u6578\u64da\u584a<\/td>\n<td width=\"279\">\u529f\u80fd\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">IHDR<\/td>\n<td width=\"279\">\u6587\u6a94\u982d<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">PLTE<\/td>\n<td width=\"279\">\u8272\u76e4<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">IDAT<\/td>\n<td width=\"279\">\u5716\u50cf\u6578\u503c<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">IEND<\/td>\n<td width=\"279\">\u7d50\u675f<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">tRNS<\/td>\n<td width=\"279\">\u5716\u50cf\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">bKGD<\/td>\n<td width=\"279\">\u80cc\u666f\u8272<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>PNG\u5716\u6a94\u982d\u634c\u5b57\u7bc0\u6a19\u8a18,\u611b\u849e\u8b58\u522bPNG<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"70\">0x89<\/td>\n<td width=\"70\">0x50<\/td>\n<td width=\"70\">0x4E<\/td>\n<td width=\"70\">0x47<\/td>\n<td width=\"70\">0x0D<\/td>\n<td width=\"70\">0x0A<\/td>\n<td width=\"70\">0x1A<\/td>\n<td width=\"70\">0x0A<\/td>\n<\/tr>\n<tr>\n<td width=\"70\">137<\/td>\n<td width=\"70\">P<\/td>\n<td width=\"70\">N<\/td>\n<td width=\"70\">G<\/td>\n<td width=\"70\">\\r<\/td>\n<td width=\"70\">\\n<\/td>\n<td width=\"70\">26<\/td>\n<td width=\"70\">\\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5c0d\u6bd4PNG\u6a19\u8b58<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"557\">\u00a0\u00a0\u00a0 if(memcmp(data,\u00a0 0x0A1A0A0D474E5089, 8) != 0)<\/p>\n<p>return false;\/\/ \u975epng\u5716\u6a94<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32<\/a>\u8a08\u7b97\u5fc5\u9700\u8a08\u300eCHUNK TYPE + CHUNK DATA\u300f, \u9577\u5ea6\u300elength + 4\u300f\u800c\u5f97.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"423\">DWORD length = PNG_VALUE32(chunk-&gt;length) + 4;<\/td>\n<td width=\"134\">\u9577<\/td>\n<\/tr>\n<tr>\n<td width=\"423\">DWORD64 crc = CRC32((PBYTE)(chunk) + 4,length);<\/td>\n<td width=\"134\">CRC32\u8a08\u7b97<\/td>\n<\/tr>\n<tr>\n<td width=\"423\">DWORD64 crc_ = PNG_VALUE32(chunk-&gt;crc_);<\/td>\n<td width=\"134\">\u8f49\u4e3b\u6a5f\u5b57\u7bc0<\/td>\n<\/tr>\n<tr>\n<td width=\"423\">\u00a0 if(crc_ == crc)<\/p>\n<p>return true;<\/p>\n<p>&nbsp;<\/td>\n<td width=\"134\">\u6bd4\u8f03crc\u503c<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u9996\u5148\u5b9a\u7fa9PNG\u7d50\u6784<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_TAG{<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int\u00a0\u00a0 width;<\/td>\n<td width=\"279\">\u5716\u5bbd<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int\u00a0 \u00a0height;<\/td>\n<td width=\"279\">\u5716\u9ad8<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int \u00a0bitCount;<\/td>\n<td width=\"279\">\u4f4d\u5716\u50cf\u7d20bits 8\u4f4d,16\u4f4d,24\u4f4d,32\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">PNG_RGBA\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 palette[256];<\/td>\n<td width=\"279\">\u8c03\u8272\u677f<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">PBYTE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 buffer;<\/td>\n<td width=\"279\">\u5716\u50cf\u6570\u636e<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 buffer_size;<\/td>\n<td width=\"279\">\u5716\u50cf\u6570\u636e\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 length;<\/td>\n<td width=\"279\">\u4e34\u6642\u8b8a\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">z_stream stream;<\/td>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_zlib\/\">ZLIB\u89e3\u58d3<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"279\">} PNG, *PNG_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6587\u6a94\u982d\u7d50\u6784 IHDR<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"239\">typedef struct PNG_IHDR_TAG{<\/td>\n<td width=\"329\">\u6587\u6a94\u982d IHDR<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">int length;<\/td>\n<td width=\"329\">Data\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">DWORD type;<\/td>\n<td width=\"329\">\u6a19\u8a18&#8217;IHDR&#8217;<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">DWORD width;<\/td>\n<td width=\"329\">\u50cf\u7d20\u5bec<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">DWORD height;<\/td>\n<td width=\"329\">\u50cf\u7d20\u9ad8<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">BYTE\u00a0 BitDepth;<\/td>\n<td width=\"329\">\u5716\u50cf\u6df1\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">BYTE\u00a0 ColorType;<\/td>\n<td width=\"329\">\u984f\u8272\u985e\u578b<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">BYTE\u00a0 Compression;<\/td>\n<td width=\"329\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_zlib\/\">LZ77\u6d3e\u751f\u6f14\u7b97\u6cd5<\/a> ,\u58f9\u5b9a\u4fc20<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">BYTE\u00a0 Filter;<\/td>\n<td width=\"329\">\u6ffe\u6ce2,\u6b62\u503c\u5b9a0. \u4e8b\u5be6\u300e0,1,2,3,4\u300f\u4f0d\u7a2e\u6ffe\u6ce2<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">BYTE\u00a0 Interlace;<\/td>\n<td width=\"329\">\u9694\u884c\u6383\u63cf0=\u5187\u6383\u63cf,1=(Adam7 interlace)<\/td>\n<\/tr>\n<tr>\n<td width=\"239\">DWORD CRC32;<\/td>\n<td width=\"329\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"239\">}PNG_IHDR,*PNG_IHDR_PTR;<\/td>\n<td width=\"329\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>PNG\u652f\u7de9\u4f0d\u6b3e\u984f\u8272\u985e\u578b<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"186\">ColorType<\/td>\n<td width=\"199\">\u984f\u8272\u985e\u578b<\/td>\n<td width=\"172\">\u50cf\u7d20<\/td>\n<\/tr>\n<tr>\n<td width=\"186\">0=Greyscale<\/td>\n<td width=\"199\">\u7070\u5ea6\u5716\u50cf<\/td>\n<td width=\"172\">1,2,4,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"186\">2=Truecolour<\/td>\n<td width=\"199\">\u771f\u5f69\u8272\u5716\u50cf<\/td>\n<td width=\"172\">8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"186\">3=Indexed-colour<\/td>\n<td width=\"199\">\u7d22\u5f15\u5f69\u8272\u5716\u50cf<\/td>\n<td width=\"172\">1,2,4,8bit<\/td>\n<\/tr>\n<tr>\n<td width=\"186\">4=Greyscale with alpha<\/td>\n<td width=\"199\">\u5e36\u03b1\u901a\u9053\u8cc7\u6599\u7070\u5ea6\u5716\u50cf<\/td>\n<td width=\"172\">8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"186\">6=Truecolour with alpha<\/td>\n<td width=\"199\">\u5e36\u03b1\u901a\u9053\u8cc7\u6599\u771f\u5f69\u8272\u5716\u50cf<\/td>\n<td width=\"172\">8,16bit<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u50cf\u7d20\u6392\u5217<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">ColorType<\/td>\n<td width=\"279\">\u50cf\u7d20\u6392\u5217<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">Greyscale<\/td>\n<td width=\"279\">Y<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">Truecolour<\/td>\n<td width=\"279\">RGB<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">Indexed-colour<\/td>\n<td width=\"279\">i<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">Greyscale with alpha<\/td>\n<td width=\"279\">RGBA<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">Truecolour with alpha<\/td>\n<td width=\"279\">YA<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u89e3\u6790\u6587\u6a94\u982d IHDR, \u5206\u914d\u5716\u50cf\u6642\u5206, \u6bcf\u884c\u50cf\u7d20\u591a\u58f9\u5b57\u7bc0,\u8a18\u9304\u300eFilter\u300f\u6ffe\u6ce2\u503c,\u300e0,1,2,3,4\u300f\u4f0d\u7a2e\u6ffe\u6ce2;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 0)<\/p>\n<p>png-&gt;bitCount = IHDR-&gt;BitDepth;<\/td>\n<td width=\"219\">0:Greyscale:\u7070\u5ea6\u5716\u50cf,1,2,4,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 2)<\/p>\n<p>png-&gt;bitCount = IHDR-&gt;BitDepth * 3;<\/td>\n<td width=\"219\">2:Truecolour:\u771f\u5f69\u8272\u5716\u50cf,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 3)<\/p>\n<p>png-&gt;bitCount = IHDR-&gt;BitDepth;<\/td>\n<td width=\"219\">3:Indexed-colour:\u7d22\u5f15\u5f69\u8272\u5716\u50cf,1,2,4,8bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 4)<\/p>\n<p>png-&gt;bitCount = IHDR-&gt;BitDepth * 2;<\/td>\n<td width=\"219\">4:Greyscale with alpha:\u5e36\u03b1\u901a\u9053\u8cc7\u6599\u7070\u5ea6\u5716\u50cf,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 6)<\/p>\n<p>png-&gt;bitCount = IHDR-&gt;BitDepth * 4;<\/td>\n<td width=\"219\">6:Truecolour with alpha:\u5e36\u03b1\u901a\u9053\u8cc7\u6599\u771f\u5f69\u8272\u5716\u50cf,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">png-&gt;width\u00a0 = PNG_VALUE32(IHDR-&gt;width);<\/td>\n<td width=\"219\">\u50cf\u7d20\u5bec<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">png-&gt;height = PNG_VALUE32(IHDR-&gt;height);<\/td>\n<td width=\"219\">\u50cf\u7d20\u9ad8<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">int byte_count\u00a0 = (float)png-&gt;bitCount \/ 8.0f;<\/td>\n<td width=\"219\">\u50cf\u7d20\u5927\u5c0f BIT to BYTE<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">png-&gt;buffer_size = (png-&gt;width * png-&gt;height * byte_count) + (png-&gt;height * 1);<\/td>\n<td width=\"219\">\u5716\u50cf\u6570\u636e\u9577\u5ea6,\u6bcf\u884c\u591a\u58f9\u5b57\u7bc0<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">png-&gt;buffer = (PBYTE)malloc(png-&gt;buffer_size);<\/td>\n<td width=\"219\">\u5716\u50cf\u6570\u636e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9a\u7fa9\u8272\u76e4RGB<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_RGB_TYP {<\/td>\n<td width=\"279\">\u8272\u76e43\u5b57\u7bc0<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE red;<\/td>\n<td width=\"279\">\u7d05<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE green;<\/td>\n<td width=\"279\">\u9304<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE blue;<\/td>\n<td width=\"279\">\u84dd<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">} PNG_RGB, *PNG_RGB_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9a\u7fa9\u8272\u76e4RGBA<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_RGBA_TYP {<\/td>\n<td width=\"279\">\u8272\u76e44\u5b57\u7bc0<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE red;<\/td>\n<td width=\"279\">\u7d05<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE green;<\/td>\n<td width=\"279\">\u9304<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE blue;<\/td>\n<td width=\"279\">\u84dd<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">\u00a0\u00a0\u00a0 BYTE alpha;<\/td>\n<td width=\"279\">\u900f\u660e\u6df7\u5408,\u900f\u660e0x00~\u5be6\u9ad40xFF<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">} PNG_RGBA, *PNG_RGBA_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9a\u7fa9PNG\u8272\u76e4\u7d50\u6784 &#8216;PLTE&#8217;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_PLTE_TYP {<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int length;<\/td>\n<td width=\"279\">Data\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD type;<\/td>\n<td width=\"279\">\u6a19\u8a18&#8217;PLTE&#8217;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">PNG_RGB palette[256];<\/td>\n<td width=\"279\">\u81f3\u591a256\u8272\u76e4<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD CRC32;<\/td>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"279\">} PNG_PLTE, *PNG_PLTE_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5206\u6790PNG\u8272\u76e4 &#8216;PLTE&#8217;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"395\">int length = PNG_VALUE32(chunk-&gt;length);<\/td>\n<td width=\"163\">\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">int count = length \/ 3;<\/td>\n<td width=\"163\">\u8272\u76e4\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">for(int index = 0; index &lt; count; ++index){<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">png-&gt;palette[index].red\u00a0\u00a0\u00a0 \u00a0\u00a0= PLTE-&gt;palette[index].red ;<\/td>\n<td width=\"163\">\u7d05<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">png-&gt;palette[index].green\u00a0 = PLTE-&gt;palette[index].green ;<\/td>\n<td width=\"163\">\u9304<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">png-&gt;palette[index].blue\u00a0\u00a0 \u00a0= PLTE-&gt;palette[index].blue ;<\/td>\n<td width=\"163\">\u84dd<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">png-&gt;palette[index].alpha\u00a0 = 0xff;\u00a0\u00a0\u00a0 }<\/td>\n<td width=\"163\">\u900f\u660e0x00~\u5be6\u9ad40xFF<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9a\u7fa9\u900f\u660e\u50cf\u7d20\u7d50\u6784&#8217;tRNS&#8217;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_tRNS_TYP{<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int length;<\/td>\n<td width=\"279\">\u6578\u64da\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD type;<\/td>\n<td width=\"279\">\u6a19\u8a18&#8217;tRNS&#8217;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">union {<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">WORD grey;<\/td>\n<td width=\"279\">\u984f\u8272\u985e\u578b 0<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">struct {WORD Red,Green,Blue;};<\/td>\n<td width=\"279\">\u984f\u8272\u985e\u578b \u00a02<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">BYTE palette[256];<\/td>\n<td width=\"279\">\u984f\u8272\u985e\u578b \u00a03<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD CRC32;<\/td>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"279\">}PNG_tRNS,*PNG_tRNS_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5206\u6790\u900f\u660e\u50cf\u7d20<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"338\">PNG_tRNS_PTR tRNS;<\/td>\n<td width=\"219\">\u900f\u660e\u50cf\u7d20<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">tRNS-&gt;length = PNG_VALUE32(tRNS-&gt;length);<\/td>\n<td width=\"219\">\u6578\u64da\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 0 )<\/p>\n<p>tRNS-&gt;grey = PNG_VALUE16(tRNS-&gt;grey);<\/td>\n<td width=\"219\">0:Greyscale:\u7070\u5ea6\u5716\u50cf,1,2,4,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 2\u00a0 ) {<\/p>\n<p>tRNS-&gt;Red\u00a0\u00a0 = PNG_VALUE16(tRNS-&gt;Red);<\/p>\n<p>tRNS-&gt;Green = PNG_VALUE16(tRNS-&gt;Green);<\/p>\n<p>tRNS-&gt;Blue\u00a0 = PNG_VALUE16(tRNS-&gt;Blue);<\/p>\n<p>}<\/td>\n<td width=\"219\">2:Truecolour:\u771f\u5f69\u8272\u5716\u50cf,8,16bit<\/td>\n<\/tr>\n<tr>\n<td width=\"338\">if(IHDR-&gt;ColorType == 3) {<\/p>\n<p>length = tRNS-&gt;length;<\/p>\n<p>for(int i = 0; i &lt; length; ++i) {<\/p>\n<p>index = tRNS-&gt;palette[i];<\/p>\n<p>png-&gt;palette[index].alpha = 0x00;<\/p>\n<p>}<\/td>\n<td width=\"219\">3:Indexed-colour:\u7d22\u5f15\u5f69\u8272\u5716\u50cf,1,2,4,8bit<\/p>\n<p>\u900f\u660e0x00~\u5be6\u9ad40xFF<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9a\u7fa9\u80cc\u666f\u8272\u7d50\u6784 &#8216;bKGD&#8217;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_bKGD_TYP{<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int length;<\/td>\n<td width=\"279\">Data\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD type;<\/td>\n<td width=\"279\">\u6a19\u8a18&#8217;bKGD&#8217;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">union {<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">WORD Greyscale;<\/td>\n<td width=\"279\">\u984f\u8272\u985e\u578b0 and 4\u7070\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">struct{WORD Red,Green,Blue;};<\/td>\n<td width=\"279\">\u984f\u8272\u985e\u578b2 and 6 -RGB\u4e09\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">BYTE Palette_Index;};<\/td>\n<td width=\"279\">\u984f\u8272\u985e\u578b3\u8272\u76e4\u7d22\u5f15<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD CRC32;<\/td>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"279\">}PNG_bKGD,*PNG_bKGD_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5206\u6790\u80cc\u666f\u8272&#8217;bKGD&#8217;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"376\">int length = PNG_VALUE32(bKGD-&gt;length);<\/td>\n<td width=\"182\">\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"376\">if(IHDR-&gt;ColorType == 0 || IHDR-&gt;ColorType == 4)<\/p>\n<p>bKGD-&gt;Greyscale = PNG_VALUE16(bKGD-&gt;Greyscale);<\/td>\n<td width=\"182\">\u7070\u5ea6\u5716\u50cf &#8211; \u5e36\u03b1\u901a\u9053\u8cc7\u6599\u7070\u5ea6\u5716\u50cf<\/td>\n<\/tr>\n<tr>\n<td width=\"376\">if(IHDR-&gt;ColorType == 2 || IHDR-&gt;ColorType == 6) {<\/p>\n<p>bKGD-&gt;Red = PNG_VALUE16(bKGD-&gt;Red);<\/p>\n<p>bKGD-&gt;Green = PNG_VALUE16(bKGD-&gt;Green);<\/p>\n<p>bKGD-&gt;Blue = PNG_VALUE16(bKGD-&gt;Blue);<\/p>\n<p>}<\/td>\n<td width=\"182\">\u771f\u5f69\u8272\u5716\u50cf &#8211; \u5e36\u03b1\u901a\u9053\u8cc7\u6599\u771f\u5f69\u8272\u5716\u50cf<\/td>\n<\/tr>\n<tr>\n<td width=\"376\">if(IHDR-&gt;ColorType == 3)<\/p>\n<p>bKGD-&gt;Palette_Index = bKGD-&gt;Palette_Index;<\/td>\n<td width=\"182\">\u7d22\u5f15\u5f69\u8272\u5716\u50cf<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9a\u7fa9\u5716\u50cf\u6578\u503c\u7d50\u6784 &#8216;IDAT&#8217;, \u6b62\u6578\u64da\u584a\u53ef\u80fd\u6709\u591a\u500b.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_IDAT_TYP {<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int length;<\/td>\n<td width=\"279\">\u00a0Data\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD type;<\/td>\n<td width=\"279\">\u6a19\u8a18&#8217;PLTE&#8217;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">BYTE data[1];<\/td>\n<td width=\"279\">\u7d93\u58d3\u7e2e\u5716\u50cf\u6578\u64da<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD CRC32;<\/td>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"279\">} PNG_IDAT, *PNG_IDAT_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6bcf\u884c\u50cf\u7d20\u591a\u58f9\u5b57\u7bc0,\u8a18\u9304\u300eFilter\u300f\u6ffe\u6ce2\u503c,\u300e0,1,2,3,4\u300f\u4f0d\u7a2e\u6ffe\u6ce2;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">int length = PNG_VALUE32(IDAT-&gt;length);<\/td>\n<td width=\"279\">\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int size = png-&gt;buffer_size &#8211; png-&gt;length;<\/td>\n<td width=\"279\">\u5269\u4f59\u8a18\u61b6\u9ad4<\/td>\n<\/tr>\n<tr>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_zlib\/\">Uncompress_Data_gZip<\/a>(png-&gt;buffer + png-&gt;length, &amp;size,<\/p>\n<p>IDAT-&gt;data,length,<\/p>\n<p>&amp;png-&gt;stream);<\/td>\n<td width=\"279\">\u89e3\u538b<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">png-&gt;length =\u00a0 png-&gt;length + size;<\/td>\n<td width=\"279\">\u7d2f\u7a4d\u7a4d\u6578\u64da\u9577\u5ea6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7d50\u675f IEND,\u6aa2\u6e2c\u5230&#8217;IEND&#8217;\u6578\u64da\u584a,\u5df1\u5230\u6587\u6a94\u672a\u7aef.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">typedef struct PNG_IEND_TAG{<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">int length;<\/td>\n<td width=\"279\">Data\u9577\u5ea60<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD type;<\/td>\n<td width=\"279\">\u6a19\u8a18&#8217;IEND&#8217;<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">DWORD CRC32;<\/td>\n<td width=\"279\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/crc32\/\">CRC32\u6821\u9a57<\/a><\/td>\n<\/tr>\n<tr>\n<td width=\"279\">}PNG_IEND, *PNG_IEND_PTR;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4ee5\u984f\u8272\u985e\u578b\u5206\u5225\u9032\u884c\u300e\u53cd\u6ffe\u6ce2\u300f, \u4fc2\u6bcf\u884c\u50cf\u7d20\u9996\u5b57\u7bc0\u300e\u6ffe\u6ce2\u300f\u503c,\u6709\u300e0,1,2,3,4\u300f\u4f0d\u6b3e\u6ffe\u6ce2, \u4ee5\u6bcf\u7c92\u50cf\u7d20\u55ae\u7368\u300e\u5fa9\u4f4d\u300f,\u5e36\u03b1\u901a\u9053\u771f\u5f69\u8272\u5716\u50cf8bit\u70ba\u4f8b.<\/p>\n<p>\u4ee5cbax\u50cf\u7d20\u6392\u5217\u652f\u7f13\u4f0d\u6b3e\u6ffe\u6ce2<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"36\">c<\/td>\n<td width=\"38\">b<\/td>\n<\/tr>\n<tr>\n<td width=\"36\">a<\/td>\n<td width=\"38\">x<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6ffe\u6ce2\u7b97\u6cd5<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"92\">filter\u6ffe\u6ce2<\/td>\n<td width=\"236\">\u6ffe\u6ce2<\/td>\n<td width=\"229\">\u5fa9\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"92\">0= None<\/td>\n<td width=\"236\">Filt(x) = Orig(x)<\/td>\n<td width=\"229\">Recon(x) = Filt(x)<\/td>\n<\/tr>\n<tr>\n<td width=\"92\">1= Sub<\/td>\n<td width=\"236\">Filt(x) = Orig(x) &#8211; Orig(a)<\/td>\n<td width=\"229\">Recon(x) = Filt(x) + Recon(a)<\/td>\n<\/tr>\n<tr>\n<td width=\"92\">2= Up<\/td>\n<td width=\"236\">Filt(x) = Orig(x) &#8211; Orig(b)<\/td>\n<td width=\"229\">Recon(x) = Filt(x) + Recon(b)<\/td>\n<\/tr>\n<tr>\n<td width=\"92\">3= Average<\/td>\n<td width=\"236\">Filt(x) = Orig(x) &#8211; floor((Orig(a) + Orig(b)) \/ 2)<\/td>\n<td width=\"229\">Recon(x) = Filt(x) + floor((Recon(a) + Recon(b)) \/ 2)<\/td>\n<\/tr>\n<tr>\n<td width=\"92\">4= Paeth<\/td>\n<td width=\"236\">Filt(x) = Orig(x) &#8211; PaethPredictor(Orig(a), Orig(b), Orig(c))<\/td>\n<td width=\"229\">Recon(x) = Filt(x) + PaethPredictor(Recon(a), Recon(b), Recon(c))<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5fa9\u4f4d\u7b97\u6cd5<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"404\">int byte_count\u00a0\u00a0 = 4;<\/td>\n<td width=\"153\">\u6bcf\u7c92\u50cf\u7d204\u5b57\u7bc0<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">int pixel_size = png-&gt;width * png-&gt;height;<\/td>\n<td width=\"153\">\u7e3d\u50cf\u7d20\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">int buffer_size = png-&gt;width * png-&gt;height * byte_count;<\/td>\n<td width=\"153\">\u7e3d\u5b57\u7bc0\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">PBYTE buffer = (PBYTE)malloc(buffer_size);<\/td>\n<td width=\"153\">\u53cd\u6ffe\u6ce2\u5f71\u50cf\u6578\u64da<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">int col_size_recon = (png-&gt;width * 4) ;<\/td>\n<td width=\"153\">\u5fa9\u4f4d\u5f8c\u6bcf\u884c\u5b57\u7bc0\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">int col_size_filt\u00a0 = (png-&gt;width * 4)\u00a0 + 1;<\/td>\n<td width=\"153\">\u6ffe\u6ce2\u5f8c\u6bcf\u884c\u5b57\u7bc0\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">for(int j = 0; j &lt; png-&gt;height ; ++j)<\/td>\n<td width=\"153\">\u6bcf\u884c\u50cf\u7d20<\/td>\n<\/tr>\n<tr>\n<td width=\"404\">int filter = png-&gt;buffer[col_size_filt * j];<\/td>\n<td width=\"153\">\u884c\u9996\u6ffe\u6ce2=1 byte<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8655\u7406filter\u6ffe\u6ce20= None<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"385\">if(filter == 0) {<\/td>\n<td width=\"172\">None<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">for(int i = 0; i &lt; png-&gt;width; ++i){<\/td>\n<td width=\"172\">\u9010\u50cf\u7d20\u5fa9\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">Red = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 0];<\/td>\n<td width=\"172\">x\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">Green = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 1];<\/td>\n<td width=\"172\">x\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">Blue = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 2];<\/td>\n<td width=\"172\">x\u50cf\u7d20\u9304\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">Alpha = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 3];<\/td>\n<td width=\"172\">x\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">buffer[(col_size_recon * j) + (i * 4) + 0] = Red;<\/td>\n<td width=\"172\">\u5fa9\u4f4d\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">buffer[(col_size_recon * j) + (i * 4) + 1] = Green;<\/td>\n<td width=\"172\">\u5fa9\u4f4d\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">buffer[(col_size_recon * j) + (i * 4) + 2] = Blue;<\/td>\n<td width=\"172\">\u5fa9\u4f4d\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"385\">buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }}<\/td>\n<td width=\"172\">\u5fa9\u4f4d\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8655\u7406filter\u6ffe\u6ce21 =Sub<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"395\">if(filter == 1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/td>\n<td width=\"163\">Sub<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">for(int i = 0; i &lt; png-&gt;width; ++i){<\/td>\n<td width=\"163\">\u9010\u50cf\u7d20\u5fa9\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Red = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 0];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Green = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 1];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Blue = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 2];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u9304\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Alpha = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 3];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aRed = aGreen = aBlue = aAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(i &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aRed = buffer[(col_size_recon * j) + ((i-1) * 4) + 0];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aGreen = buffer[(col_size_recon * j) + ((i-1) * 4) + 1];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aBlue = buffer[(col_size_recon * j) + ((i-1) * 4) + 2];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aAlpha = buffer[(col_size_recon * j) + ((i-1) * 4) + 3]; }<\/td>\n<td width=\"163\">a\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 0] = Red + aRed;<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 1] = Green + aGreen;<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + aBlue;<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + aAlpha; }}<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8655\u7406filter\u6ffe\u6ce22 =Up<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"395\">if(filter == 2){<\/td>\n<td width=\"163\">Up<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">for( i = 0; i &lt; png-&gt;width; ++i){<\/td>\n<td width=\"163\">\u9010\u50cf\u7d20\u5fa9\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Red = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 0];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Green = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 1];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Blue = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 2];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u9304\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Alpha = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 3];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bRed = bGreen = bBlue = bAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(j &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bRed = buffer[(col_size_recon * (j-1)) + (i * 4) + 0];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bGreen = buffer[(col_size_recon * (j-1)) + (i * 4) + 1];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bBlue = buffer[(col_size_recon * (j-1)) + (i * 4) + 2];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bAlpha = buffer[(col_size_recon * (j-1)) + (i * 4) + 3];}<\/td>\n<td width=\"163\">b\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 0] = Red + bRed;<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 1] = Green + bGreen;<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + bBlue;<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + bAlpha; }}<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8655\u7406filter\u6ffe\u6ce23 = Average<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"395\">if(filter == 3)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/td>\n<td width=\"163\">Average<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">for( i = 0; i &lt; png-&gt;width; ++i){<\/td>\n<td width=\"163\">\u9010\u50cf\u7d20\u5fa9\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Red = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 0];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Green = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 1];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Blue = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 2];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u9304\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Alpha = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 3];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aRed = aGreen = aBlue = aAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bRed = bGreen = bBlue = bAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(i &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aRed = buffer[(col_size_recon * j) + ((i-1) * 4) + 0];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aGreen = buffer[(col_size_recon * j) + ((i-1) * 4) + 1];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aBlue = buffer[(col_size_recon * j) + ((i-1) * 4) + 2];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aAlpha = buffer[(col_size_recon * j) + ((i-1) * 4) + 3]; }<\/td>\n<td width=\"163\">a\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(j &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bRed = buffer[(col_size_recon * (j-1)) + (i * 4) + 0];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bGreen = buffer[(col_size_recon * (j-1)) + (i * 4) + 1];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bBlue = buffer[(col_size_recon * (j-1)) + (i * 4) + 2];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bAlpha = buffer[(col_size_recon * (j-1)) + (i * 4) + 3];}<\/td>\n<td width=\"163\">b\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 0] = Red + ((aRed+bRed)\/2);<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 1] = Green + ((aGreen+bGreen)\/2);<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + ((aBlue+bBlue)\/2);<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + ((aAlpha+bAlpha)\/2); }}<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Paeth\u9810\u6e2c\u51fd\u5f0f<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"395\">BYTE PaethPredictor_PNG(BYTE a,BYTE b,BYTE c){<\/td>\n<td width=\"163\">\u9810\u6e2c\u51fd\u5f0f<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">int p;<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">int pa,pb,pc;<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">p = a + b &#8211; c;<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">pa = abs(p &#8211; a);<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">pb = abs(p &#8211; b);<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">pc = abs(p &#8211; c);<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if (pa &lt;= pb &amp;&amp; pa &lt;= pc ) \u00a0return a;<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">else if (pb &lt;= pc ) return b;<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">else return c;}<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8655\u7406filter\u6ffe\u6ce24 =Paeth\u9810\u6e2c<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"395\">if(filter == 3)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/td>\n<td width=\"163\">Average<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">for( i = 0; i &lt; png-&gt;width; ++i){<\/td>\n<td width=\"163\">\u9010\u50cf\u7d20\u5fa9\u4f4d<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Red = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 0];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Green = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 1];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Blue = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 2];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u9304\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">Alpha = png-&gt;buffer[(col_size_filt * j) + 1 + (i * 4) + 3];<\/td>\n<td width=\"163\">x\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aRed = aGreen = aBlue = aAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bRed = bGreen = bBlue = bAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">cRed = cGreen = cBlue = cAlpha = 0;<\/td>\n<td width=\"163\">\u6e05\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(i &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aRed = buffer[(col_size_recon * j) + ((i-1) * 4) + 0];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aGreen = buffer[(col_size_recon * j) + ((i-1) * 4) + 1];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aBlue = buffer[(col_size_recon * j) + ((i-1) * 4) + 2];<\/td>\n<td width=\"163\">a\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">aAlpha = buffer[(col_size_recon * j) + ((i-1) * 4) + 3]; }<\/td>\n<td width=\"163\">a\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(j &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bRed = buffer[(col_size_recon * (j-1)) + (i * 4) + 0];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bGreen = buffer[(col_size_recon * (j-1)) + (i * 4) + 1];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bBlue = buffer[(col_size_recon * (j-1)) + (i * 4) + 2];<\/td>\n<td width=\"163\">b\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">bAlpha = buffer[(col_size_recon * (j-1)) + (i * 4) + 3];}<\/td>\n<td width=\"163\">b\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">if(i &gt; 0 &amp;&amp; j &gt; 0) {<\/td>\n<td width=\"163\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">cRed = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 0];<\/td>\n<td width=\"163\">c\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">cGreen = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 1];<\/td>\n<td width=\"163\">c\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">cBlue = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 2];<\/td>\n<td width=\"163\">c\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">cAlpha = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 3];}<\/td>\n<td width=\"163\">c\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 0] = Red + PaethPredictor_PNG(aRed,bRed,cRed);<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 1] = Green + PaethPredictor_PNG(aGreen,bGreen,cGreen);<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u85cd\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + PaethPredictor_PNG(aBlue,bBlue,cBlue);<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"395\">buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + PaethPredictor_PNG(aAlpha,bAlpha,cAlpha);}}<\/td>\n<td width=\"163\">\u5fa9\u4f4d\u50cf\u7d20\u900f\u660e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u91ca\u653e\u5716\u50cf<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"279\">free(png-&gt;buffer);<\/td>\n<td width=\"279\">\u91ca\u653e<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">png-&gt;buffer = buffer;<\/td>\n<td width=\"279\">\u66ff\u6362\u5fa9\u4f4d\u5716\u50cf<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">png-&gt;bitCount = 32;<\/td>\n<td width=\"279\">rgba<\/td>\n<\/tr>\n<tr>\n<td width=\"279\">png-&gt;buffer_size = buffer_size;<\/td>\n<td width=\"279\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u820a\u6642\u300e\u6e38\u6232\u7d0b\u7406\u300f\u518d\u7528\u300e.bmp\u683c\u5f0f\u300f, \u5187\u58d3\u7f29\u5373\u4f7f256\u8272\u76e4\u4f9d\u7136\u4f54\u7528\u5409\u9593. \u300e.PNG\u683c\u5f0f\u300f\u5229LZ77\u4e14\u5187\u5931\u771f &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/png\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">\u5716\u6a94-PNG\u89e3\u6790<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[42],"class_list":["post-16905","post","type-post","status-publish","format-standard","hentry","category-pc","tag-computer","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/16905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/comments?post=16905"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/16905\/revisions"}],"predecessor-version":[{"id":16907,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/16905\/revisions\/16907"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=16905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=16905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=16905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}