{"id":3866,"date":"2018-03-12T20:52:08","date_gmt":"2018-03-12T12:52:08","guid":{"rendered":"http:\/\/www.bookcard.net\/wordpress\/?p=3866"},"modified":"2018-10-14T21:21:54","modified_gmt":"2018-10-14T13:21:54","slug":"opengl_read_pcx_file","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/opengl_read_pcx_file\/","title":{"rendered":"OpenGL\u4e4b\u8b80\u53d6PCX\u5716\u6a94"},"content":{"rendered":"<figure id=\"attachment_3867\" aria-describedby=\"caption-attachment-3867\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_Read_PCX_file.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3867\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_Read_PCX_file.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_Read_PCX_file.jpg 1024w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_Read_PCX_file-300x225.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/03\/OpenGL_Read_PCX_file-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-3867\" class=\"wp-caption-text\">OpenGL\u4e4b\u8b80\u53d6PCX\u5716\u6a94<\/figcaption><\/figure>\n<p>PCX\u5716\u6a94\u8f03\u5e38\u7528\u65bc3D\u7d0b\u7406,\u4f60\u76843D\u904a\u6232\u5f15\u64ce\u7121\u4efb\u4f55\u7406\u7531\u62d2\u7d55\u652f\u6301PCX\u683c\u5f0f\u7684\u5716\u6a94.\u5e78\u597dPCX\u683c\u5f0f\u975e\u5e38\u7c21\u55ae.\u6e32\u67d3\u6f14\u793a\u7a0b\u5f0f<a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_image\/\">\u4e0b\u8f09<\/a>:<\/p>\n<p>\u5b83\u4e3b\u8981\u7531\u4e09\u90e8\u4efd\u7d44\u6210\uff1a<\/p>\n<ol>\n<li>\u6587\u6a94\u982d\u90e8<\/li>\n<li>\u7d93RLE\u7de8\u78bc\u7684\u5716\u50cf\u6578\u64da<\/li>\n<li>\u8abf\u8272\u677f,\u53ea\u7528\u65bc256\u8272<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">PCX\u6587\u6a94\u982d\u90e8\u7d50\u69cb<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">typedef struct PCX_HEADER_TAG{<\/td>\n<td width=\"277\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR \u00a0manufacturer;<\/td>\n<td width=\"277\">PCX\u6a19\u8a18:\u7e3d\u662f 0x0A<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 version;<\/td>\n<td width=\"277\">\u7248\u672c\u865f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 encoding;<\/td>\n<td width=\"277\">\u7de8\u78bc:\u7e3d\u70ba 1,\u4f7f\u7528RLE\u7de8\u78bc<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 bits_per_pixel;<\/td>\n<td width=\"277\">\u6bcf\u50cf\u6578\u6240\u5360\u7684\u4f4d\u6578 1,2,4,8<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT xmin, ymin;<\/td>\n<td width=\"277\">\u5716\u50cf\u7684\u5de6\u4e0b\u89d2\u908a\u754c<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT xmax, ymax;<\/td>\n<td width=\"277\">\u5716\u50cf\u7684\u53f3\u4e0a\u89d2\u908a\u754c<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT hres;<\/td>\n<td width=\"277\">\u6c34\u5e73\u5206\u8fa8\u7387<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT yres;<\/td>\n<td width=\"277\">\u5782\u76f4\u5206\u8fa8\u7387<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 EGAcolors[48];<\/td>\n<td width=\"277\">EGA(16\u8272)\u8abf\u8272\u677f,\u9019\u7a2e\u5716\u6a94\u4ee5\u8f03\u5c0f\u5f0f\u7528<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 reserved;<\/td>\n<td width=\"277\">\u4fdd\u7559\u5b57\u7bc0<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 color_planes;<\/td>\n<td width=\"277\">\u8272\u5f69\u5e73\u9762\u91cf (24Bit\u5716\u6a94\u70ba3)<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT bytes_per_line;<\/td>\n<td width=\"277\">\u6bcf\u884c\u5b57\u7bc0\u6578(\u55ae\u500b\u984f\u8272\u5206\u91cf)<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT palette_type;<\/td>\n<td width=\"277\">1\u70ba\u7070\u5ea6,2\u70ba\u5f69\u8272\u8abf\u8272\u677f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT scrnw;<\/td>\n<td width=\"277\">\u5c4f\u5e55\u6c34\u5e73\u50cf\u7d20<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">USHORT scrnh;<\/td>\n<td width=\"277\">\u5c4f\u5e55\u5782\u76f4\u50cf\u7d20<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">UCHAR\u00a0 filler[54];<\/td>\n<td width=\"277\">54BYTE\u5168\u96f6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">} PCX_HEADER, *PCX_HEADER_PTR;<\/td>\n<td width=\"277\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4f60\u9700\u8981\u5b9a\u7fa9\u65b0\u7684PCX\u7d50\u69cb\u7528\u65bc\u4fdd\u5b58PCX\u4fe1\u606f.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">PCX<\/td>\n<td width=\"277\">\u7d50\u69cb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">typedef struct PCX_TAG{<\/td>\n<td width=\"277\">&nbsp;<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 width;<\/td>\n<td width=\"277\">\u5716\u5bec=xmax &#8211; xmin + 1<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 height;<\/td>\n<td width=\"277\">\u5716\u9ad8=ymax &#8211; ymin + 1<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bitCount;<\/td>\n<td width=\"277\">\u4f4d\u5716\u50cf\u7d20\u7684bits 8\u4f4d,16\u4f4d,24\u4f4d,32\u4f4d<\/p>\n<p>bitCount=color_planes*bytes_per_line<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">PCX_PALETTEENTRY\u00a0 palette[256];<\/td>\n<td width=\"277\">\u8abf\u8272\u677f,\u7576\u5716\u6a94\u70ba256\u8272\u6642\u51fa\u73fe<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">PBYTE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 buffer;<\/td>\n<td width=\"277\">\u5716\u50cf\u6578\u64da<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">} PCX, *PCX_PTR;<\/td>\n<td width=\"277\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6211\u5be6\u73fePCX\u89e3\u91cb\u5668\u652f\u6301\u300e256\u8272\u300f\u300e16BIT\u300f\u5169\u7a2e\u5e38\u898b\u683c\u5f0f:<\/p>\n<p>bool Load_PCX(PCX_PTR pcx,PBYTE data,int size)<\/p>\n<p>{<\/p>\n<p>int\u00a0\u00a0\u00a0\u00a0\u00a0 index;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ \u5faa\u73af\u53d8\u91cf<\/p>\n<p>PBYTE\u00a0\u00a0 image;\/\/ \u56fe\u50cf\u6570\u636e<\/p>\n<p>int\u00a0\u00a0\u00a0\u00a0 image_size;\/\/ \u50cf\u6570\u4e2a\u6570<\/p>\n<p>PBYTE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RLE;\/\/\u00a0 RLE\u7f16\u7801\u56fe\u50cf\u6570\u636e<\/p>\n<p>PCX_HEADER_PTR\u00a0 header;\/\/ \u6587\u6863\u7684\u5934\u90e8<\/p>\n<p>PCX_PALETTEENTRY_PTR\u00a0 palette;\/\/ \u8bfb\u53d6PCX\u7684\u8c03\u8272\u7248<\/p>\n<p>header = (PCX_HEADER_PTR)data; \/\/ \u6587\u6863\u7684\u5934\u90e8<\/p>\n<p>pcx-&gt;width\u00a0 = (header-&gt;xmax &#8211; header-&gt;xmin) + 1;\/\/ \u56fe\u50cf\u5bbd\u5ea6(\u50cf\u6570)<\/p>\n<p>pcx-&gt;height = (header-&gt;ymax &#8211; header-&gt;ymin) + 1;\/\/ \u56fe\u50cf\u9ad8\u5ea6(\u50cf\u6570)<\/p>\n<p>pcx-&gt;bitCount = header-&gt;bits_per_pixel * header-&gt;color_planes;\/\/ \u8ba1\u7b97\u6bcf\u50cf\u6570\u6240\u5360\u7684\u4f4d\u6570<\/p>\n<p>RLE = data + sizeof(PCX_HEADER);<\/p>\n<p>if (pcx-&gt;bitCount == 8)<\/p>\n<p>{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ \u5206\u914d\u56fe\u50cf\u8bb0\u5fc6\u4f53<\/p>\n<p>pcx-&gt;buffer = (PBYTE)malloc(pcx-&gt;width*pcx-&gt;height * 3);<\/p>\n<p>image = (PBYTE)malloc(pcx-&gt;width*pcx-&gt;height);<\/p>\n<p>image_size = pcx-&gt;width * pcx-&gt;height;\/\/ \u56fe\u50cf\u7684\u50cf\u7d20<\/p>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_pcx_file_rle\/\">Load_RLE_PCX(image, RLE, pcx-&gt;width, pcx-&gt;height);\/\/ RLE\u89e3\u7801<\/a><\/p>\n<p>\/\/ \u8bfb\u53d6PCX\u7684\u8c03\u8272\u7248<\/p>\n<p>palette = (PCX_PALETTEENTRY_PTR)(data + size &#8211; 768);\/\/ \u5728\u6587\u4ef6\u7684\u7ed3\u675f\u7684\u4f4d\u7f6e\u524d\u79fb768\u5b57\u8282\u5373\u79fb\u52a8\u5230\u8c03\u8272\u677f\u7684\u5f00\u59cb\u4f4d\u7f6e<\/p>\n<p>for (int i = 0; i &lt; image_size; ++i)<\/p>\n<p>{\/\/\u6389\u8f6c\u7ea2\u8272\u548c\u7eff\u8272<\/p>\n<p>index = image[i];<\/p>\n<p>pcx-&gt;buffer[i*3 + 0] = palette[index].red;\/\/ \u7ea2\u8272\u90e8\u5206<\/p>\n<p>pcx-&gt;buffer[i*3 + 1] = palette[index].green;\/\/ \u53d6\u7684\u7eff\u8272\u90e8\u5206<\/p>\n<p>pcx-&gt;buffer[i*3 + 2] = palette[index].blue;\/\/ \u53d6\u7684\u84dd\u8272\u90e8\u5206<\/p>\n<p>}<\/p>\n<p>pcx-&gt;bitCount = 24;<\/p>\n<p>free(image);\/\/ \u91ca\u653e\u8bb0\u5fc6\u4f53<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (pcx-&gt;bitCount == 24)<\/p>\n<p>{\/\/ \u5206\u914d\u56fe\u50cf\u8bb0\u5fc6\u4f53<\/p>\n<p>pcx-&gt;buffer = (PBYTE)malloc(pcx-&gt;width<em>pcx-&gt;height<\/em>3);<\/p>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_pcx_file_rle\/\">Load_RLE24_PCX(pcx-&gt;buffer, RLE, pcx-&gt;width, pcx-&gt;height);\/\/ RLE\u89e3\u7801<\/a><\/p>\n<p>}<\/p>\n<p>return true;<\/p>\n<p>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PCX\u5716\u6a94\u8f03\u5e38\u7528\u65bc3D\u7d0b\u7406,\u4f60\u76843D\u904a\u6232\u5f15\u64ce\u7121\u4efb\u4f55\u7406\u7531\u62d2\u7d55\u652f\u6301PCX\u683c\u5f0f\u7684\u5716\u6a94.\u5e78\u597dPCX\u683c\u5f0f\u975e\u5e38\u7c21\u55ae.\u6e32\u67d3\u6f14 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_pcx_file\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">OpenGL\u4e4b\u8b80\u53d6PCX\u5716\u6a94<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62],"tags":[50],"class_list":["post-3866","post","type-post","status-publish","format-standard","hentry","category-opengl","tag-opengl","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3866","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=3866"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3866\/revisions"}],"predecessor-version":[{"id":3868,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3866\/revisions\/3868"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=3866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=3866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=3866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}