{"id":3805,"date":"2018-02-25T16:58:05","date_gmt":"2018-02-25T08:58:05","guid":{"rendered":"http:\/\/www.bookcard.net\/wordpress\/?p=3805"},"modified":"2018-10-14T21:25:50","modified_gmt":"2018-10-14T13:25:50","slug":"opengl_read_targa_file","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/opengl_read_targa_file\/","title":{"rendered":"OpenGL\u4e4b\u8b80\u53d6Targa\u5716\u6a94"},"content":{"rendered":"<figure id=\"attachment_3806\" aria-describedby=\"caption-attachment-3806\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/02\/OpenGL_Read_Targa_file.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3806\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/02\/OpenGL_Read_Targa_file.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/02\/OpenGL_Read_Targa_file.jpg 1024w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/02\/OpenGL_Read_Targa_file-300x225.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/02\/OpenGL_Read_Targa_file-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-3806\" class=\"wp-caption-text\">OpenGL\u4e4b\u8b80\u53d6Targa\u5716\u6a94<\/figcaption><\/figure>\n<p>\u300eTarga\u300f\u662f\u5e38\u7528\u65bc3D\u7d0b\u7406\u7684\u300e.tga\u300f\u5716\u6a94,\u5b83\u8207\u300eBitmap\u300f\u6700\u5927\u7684\u5206\u5225\u662f\u7d22\u5f15\u3001RGB\u3001\u7070\u5ea6\u5747\u652f\u6301RLE\u7de8\u78bc,\u7576\u8272\u5f69\u8f03\u55ae\u8abf\u6642\u58d3\u7e2e\u6548\u679c\u660e\u986f. \u6e32\u67d3\u6f14\u793a\u7a0b\u5f0f<a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_image\/\">\u4e0b\u8f09<\/a>:<\/p>\n<p>\u5b83\u7684\u6587\u6a94\u7d50\u69cb\u4e3b\u8981\u7531\u4e09\u90e8\u4efd\u7d44\u6210:<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">Targa\u5716\u6a94\u7d50\u69cb<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">HEADER header;<\/td>\n<td width=\"277\">\u982d\u90e8<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">PALETTEENTRY palette[256];<\/td>\n<td width=\"277\">\u8abf\u8272\u677f\u5e38\u7528\u65bc256\u8272\u6a21\u5f0f,\u7070\u5ea6\u6a21\u5f0f\u548cRGB\u6a21\u5f0f\u5747\u7121\u8abf\u8272\u677f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">PBYTE buffer;<\/td>\n<td width=\"277\">\u4f4d\u5716\u6578\u64da<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u982d\u90e8\u7d50\u69cb<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE imageIDLength;<\/td>\n<td width=\"277\">\u5716\u50cf\u982d\u90e8\u7684\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE colorMayType<\/td>\n<td width=\"277\">\u8abf\u8272\u677f\u985e\u578b<\/p>\n<p>0=\u7121<\/p>\n<p>1=\u4f7f\u7528\u8abf\u8272\u76e4<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE imageTypeCode<\/td>\n<td width=\"277\">\u5716\u50cf\u985e\u578b<\/p>\n<p>0=\u7121\u5716\u50cf\u6578\u64da<\/p>\n<p>1=\u7d22\u5f15\u6a21\u5f0f<\/p>\n<p>2= RGB\u6a21\u5f0f<\/p>\n<p>3=\u7070\u5ea6\u6a21\u5f0f<\/p>\n<p>9=RLE\u58d3\u7e2e\u7d22\u5f15\u6a21\u5f0f<\/p>\n<p>10=RLE\u58d3\u7e2eRGB\u6a21\u5f0f<\/p>\n<p>11=RLE\u58d3\u7e2e\u7070\u5ea6\u6a21\u5f0f<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">WORD colorMapOrigin<\/td>\n<td width=\"277\">\u8abf\u8272\u677f\u504f\u79fb\u91cf<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">WORD colorMapLength<\/td>\n<td width=\"277\">\u8abf\u8272\u677f\u7684\u9577\u5ea68bit\u5716\u6a94\u9019\u500b\u503c\u70ba256<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE colorMapEntrySize<\/td>\n<td width=\"277\">\u8abf\u8272\u677f\u55ae\u500b\u689d\u76ee\u7684\u5927\u7d30<\/p>\n<p>\u6709\u672c\u66f8\u5c45\u7136\u5beb\u932f\u5de6\u6240\u5360\u7a7a\u9593\u5927\u7d30\u6688<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">WORD imageXOrigin<\/td>\n<td width=\"277\">\u5716\u50cf\u5de6\u4e0b\u89d2\u7684X\u8ef8\u5ea7\u6a19\u7e3d\u70ba0<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">WORD imageYOrigin<\/td>\n<td width=\"277\">\u5716\u50cf\u5de6\u4e0b\u89d2\u7684Y\u8ef8\u5ea7\u6a19\u7e3d\u70ba0<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">WORD imageWidth<\/td>\n<td width=\"277\">\u5716\u5bec<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">WORD imageHeight<\/td>\n<td width=\"277\">\u5716\u9ad8<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE bitCount<\/td>\n<td width=\"277\">\u50cf\u7d208BIT,16BIT,24BIT,32BIT<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE imageDescriptor<\/td>\n<td width=\"277\">\u5716\u50cf\u539f\u9ede\u7684\u4f4d\u7f6e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"277\">\u8abf\u8272\u677f\u7d50\u69cb<\/td>\n<td width=\"277\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE red;<\/td>\n<td width=\"277\">\u7d05\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE green;<\/td>\n<td width=\"277\">\u7da0\u8272<\/td>\n<\/tr>\n<tr>\n<td width=\"277\">BYTE blue;<\/td>\n<td width=\"277\">\u85cd\u8272<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u8f09\u5165\u4e26\u5206\u91cbTARGA\u5716\u6a94<\/p>\n<p>bool Load_Targa(TARGA_FILE_PTR targa, PBYTE data,int size)<\/p>\n<p>{<\/p>\n<p>int index;<\/p>\n<p>PBYTE image;<\/p>\n<p>int\u00a0\u00a0 image_size;\/\/ \u5716\u50cf\u5b57\u7bc0\u7684\u9577\u5ea6<\/p>\n<p>int\u00a0\u00a0 pixel_size;\/\/ \u50cf\u7d20\u5927\u5c0f<\/p>\n<p>int\u00a0\u00a0 pixel_count;\/\/ \u50cf\u7d20\u500b\u6578(\u5bec*\u9ad8)<\/p>\n<p>memcpy(&amp;targa-&gt;header, data, sizeof(TARGA_HEADER));\/\/ \u8b80\u53d6\u982d\u90e8\u6578\u64da<\/p>\n<p>image_size = targa-&gt;header.imageWidth * targa-&gt;header.imageHeight * targa-&gt;header.bitCount \/ 8;<\/p>\n<p>pixel_size = targa-&gt;header.bitCount \/ 8;<\/p>\n<p>pixel_count = targa-&gt;header.imageWidth * targa-&gt;header.imageHeight;<\/p>\n<p>targa-&gt;buffer = (PBYTE)malloc(image_size);\/\/ \u6839\u64da\u4f4d\u5716\u5f71\u50cf\u7684\u5927\u5c0f\u7533\u8acb\u7a7a\u9593<\/p>\n<p>if (targa-&gt;buffer == NULL)<\/p>\n<p>return false;\/\/\u51fa\u932f\u8fd4\u56de<\/p>\n<p>if (targa-&gt;header.imageTypeCode == TARGA_TYPE_INDEXED ||<\/p>\n<p>targa-&gt;header.imageTypeCode == TARGA_TYPE_INDEXED_RLE )\/\/ \u58d3\u7e2e\u7d22\u5f15<\/p>\n<p>image = data + sizeof(TARGA_HEADER) + targa-&gt;header.imageIDLength + targa-&gt;header.colorMapOrigin + (targa-&gt;header.colorMapEntrySize \/ 8) * targa-&gt;header.colorMapLength;<\/p>\n<p>else<\/p>\n<p>image = data + sizeof(TARGA_HEADER) + targa-&gt;header.imageIDLength ;<\/p>\n<p>if( targa-&gt;header.imageTypeCode == TARGA_TYPE_INDEXED ||\/\/ \u7d22\u5f15<\/p>\n<p>targa-&gt;header.imageTypeCode == TARGA_TYPE_RGB\u00a0\u00a0\u00a0\u00a0 ||\/\/ RGB<\/p>\n<p>targa-&gt;header.imageTypeCode == TARGA_TYPE_GRAYSCALE)\/\/ \u7070\u5ea6<\/p>\n<p>{\u00a0\u00a0 \/\/ \u8b80\u53d6\u4f4d\u5716\u7684\u5716\u50cf<\/p>\n<p>memcpy(targa-&gt;buffer, image, image_size);<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (targa-&gt;header.imageTypeCode == TARGA_TYPE_INDEXED_RLE\u00a0 ||\/\/ \u58d3\u7e2e\u7d22\u5f15<\/p>\n<p>targa-&gt;header.imageTypeCode == TARGA_TYPE_RGB_RLE\u00a0\u00a0\u00a0\u00a0\u00a0 ||\/\/ \u58d3\u7e2eRGB<\/p>\n<p>targa-&gt;header.imageTypeCode == TARGA_TYPE_GRAYSCALE_RLE )\/\/ \u58d3\u7e2e\u7070\u5ea6<\/p>\n<p>{ \/\/ RLE\u89e3\u78bc<\/p>\n<p><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_targa_file_rle\/\">Load_RLE_Targa<\/a>(targa-&gt;buffer, image, image_size, pixel_size);<\/p>\n<p>}<\/p>\n<p>if (targa-&gt;header.bitCount == 8)<\/p>\n<p>{\u00a0\u00a0 \/\/ \u8a08\u7b97\u8abf\u8272\u677f\u7684\u5165\u53e3\u5730\u5740<\/p>\n<p>PBYTE\u00a0 palette = data + sizeof(TARGA_HEADER) + targa-&gt;header.imageIDLength + targa-&gt;header.colorMapOrigin;<\/p>\n<p>\/\/ RGBQUAD\u7d50\u69cb\u8207PALETTEENTRY\u7d50\u69cb\u7684\u9806\u5e8f\u8abf\u8f49\u4e86<\/p>\n<p>for (index = 0; index &lt; targa-&gt;header.colorMapLength; index++)<\/p>\n<p>{\/\/\u6389\u8f49\u8abf\u8272\u677f\u7684\u7d05\u8272\u548c\u7da0\u8272<\/p>\n<p>targa-&gt;palette[index].red\u00a0\u00a0 = palette[index *targa-&gt;header.colorMapEntrySize\/8 + 2];<\/p>\n<p>targa-&gt;palette[index].green = palette[index *targa-&gt;header.colorMapEntrySize\/8 + 1];<\/p>\n<p>targa-&gt;palette[index].blue\u00a0 = palette[index *targa-&gt;header.colorMapEntrySize\/8 + 0];<\/p>\n<p>targa-&gt;palette[index].flags = PC_NOCOLLAPSE;<\/p>\n<p>}<\/p>\n<p>PBYTE temp_buffer = targa-&gt;buffer;<\/p>\n<p>\/\/\u6839\u64da\u5716\u50cf\u7684\u5bec\u9ad8\u8a08\u7b97\u8a18\u61b6\u9ad4\u7a7a\u9593(24BIT)<\/p>\n<p>targa-&gt;buffer = (UCHAR *)malloc(targa-&gt;header.imageWidth * targa-&gt;header.imageHeight * 3);<\/p>\n<p>if (targa-&gt;buffer == NULL)<\/p>\n<p>return false;\/\/\u51fa\u932f\u8fd4\u56de<\/p>\n<p>for (index = 0; index &lt; image_size; index++)<\/p>\n<p>{ \/\/ \u73fe\u5728\u5c07\u7d22\u5f15\u503c\u8f49\u70ba24\u4f4d\u503c<\/p>\n<p>int color = temp_buffer[index];<\/p>\n<p>if (targa-&gt;header.imageTypeCode == TARGA_TYPE_GRAYSCALE ||<\/p>\n<p>targa-&gt;header.imageTypeCode == TARGA_TYPE_GRAYSCALE_RLE)<\/p>\n<p>{\/\/ \u8655\u7406\u7070\u5ea6\u5716\u50cf<\/p>\n<p>targa-&gt;buffer[index * 3 + 0] = color;<\/p>\n<p>targa-&gt;buffer[index * 3 + 1] = color;<\/p>\n<p>targa-&gt;buffer[index * 3 + 2] = color;<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>{<\/p>\n<p>targa-&gt;buffer[index * 3 + 0] = targa-&gt;palette[color].red;<\/p>\n<p>targa-&gt;buffer[index * 3 + 1] = targa-&gt;palette[color].green;<\/p>\n<p>targa-&gt;buffer[index * 3 + 2] = targa-&gt;palette[color].blue;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>targa-&gt;header.bitCount = 24;\/\/\u6700\u5f8c\u5c07\u4f4d\u5716\u4f4d\u6578\u8b8a\u70ba24\u4f4d<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (targa-&gt;header.bitCount == 16)\/\/RGB555<\/p>\n<p>{\u00a0\u00a0 \/\/ \u6839\u64da\u4f4d\u5716\u5f71\u50cf\u7684\u5927\u5c0f\u7533\u8acb\u7a7a\u9593<\/p>\n<p>PBYTE temp_buffer = targa-&gt;buffer;<\/p>\n<p>\/\/ \u6839\u64da\u4f4d\u5716\u5f71\u50cf\u7684\u5927\u5c0f\u751f\u8acb\u7a7a\u9593(\u4f4d\u5716\u70ba16\u4f4d\u4f46\u8981\u751f\u621024\u4f4d\u7a7a\u9593\u4f86\u4fdd\u5b58)<\/p>\n<p>targa-&gt;buffer = (UCHAR *)malloc(targa-&gt;header.imageWidth * targa-&gt;header.imageHeight * 3);<\/p>\n<p>if (targa-&gt;buffer == NULL)<\/p>\n<p>{\/\/\u5206\u914d\u5167\u5b58\u7a7a\u9593\u5931\u6557<\/p>\n<p>free(temp_buffer); \/\/ \u91cb\u653e\u8cc7\u6e90<\/p>\n<p>return false;\/\/\u51fa\u932f\u8fd4\u56de<\/p>\n<p>}<\/p>\n<p>for (index = 0; index &lt; pixel_count; ++index)<\/p>\n<p>{<\/p>\n<p>WORD color = (temp_buffer[index<em>2 + 1] &lt;&lt; 8) | temp_buffer[index<\/em>2 + 0];<\/p>\n<p>UCHAR red = (((color) &gt;&gt; 10) &amp; 0x1f);<\/p>\n<p>UCHAR green = (((color) &gt;&gt; 5) &amp; 0x1f);<\/p>\n<p>UCHAR blue = ((color) &amp; 0x1f);<\/p>\n<p>targa-&gt;buffer[index * 3 + 0] = (red &lt;&lt; 3);<\/p>\n<p>targa-&gt;buffer[index * 3 + 1] = (green &lt;&lt; 3);<\/p>\n<p>targa-&gt;buffer[index * 3 + 2] = (blue &lt;&lt; 3);<\/p>\n<p>}<\/p>\n<p>targa-&gt;header.bitCount = 24;\/\/\u6700\u5f8c\u5c07\u4f4d\u5716\u4f4d\u6578\u8b8a\u70ba24\u4f4d<\/p>\n<p>free(temp_buffer); \/\/ \u91cb\u653e\u8cc7\u6e90<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (targa-&gt;header.bitCount == 24)<\/p>\n<p>{<\/p>\n<p>for (index = 0; index &lt; image_size; index = index + 3)<\/p>\n<p>{<\/p>\n<p>UCHAR blue = targa-&gt;buffer[index + 0];<\/p>\n<p>UCHAR green = targa-&gt;buffer[index + 1];<\/p>\n<p>UCHAR red = targa-&gt;buffer[index + 2];<\/p>\n<p>targa-&gt;buffer[index + 0] = red ;<\/p>\n<p>targa-&gt;buffer[index + 2] = blue;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>if (targa-&gt;header.bitCount == 32)<\/p>\n<p>{<\/p>\n<p>for (index = 0; index &lt; image_size; index = index + 4)<\/p>\n<p>{<\/p>\n<p>\/\/DWORD color;\/\/32\u7684\u984f\u8272<\/p>\n<p>UCHAR blue = targa-&gt;buffer[index + 0];<\/p>\n<p>UCHAR green = targa-&gt;buffer[index + 1];<\/p>\n<p>UCHAR red = targa-&gt;buffer[index + 2];<\/p>\n<p>targa-&gt;buffer[index + 0] = red;<\/p>\n<p>targa-&gt;buffer[index + 2] = blue;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>\/\/ \u5224\u65b7\u5716\u50cf\u539f\u9ede\u662f\u5426\u5de6\u4e0b\u89d2,\u5426\u5247\u7ffb\u8f49\u5716\u50cf<\/p>\n<p>if ((targa-&gt;header.imageDescriptor &amp; TARGA_ORIGIN_TOP_LEFT) == TARGA_ORIGIN_TOP_LEFT)<\/p>\n<p>Flip_Targa(targa-&gt;buffer, targa-&gt;header.imageWidth * pixel_size, targa-&gt;header.imageHeight);<\/p>\n<p>return true;\/\/<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\u5c07\u985b\u5012\u7684\u5716\u50cf\u7ffb\u8f49\u904e\u4f86<\/p>\n<p>image:\u6307\u5411\u4f4d\u5716\u6578\u64da<\/p>\n<p>bytes_per_line:\u5716\u50cf\u6bcf\u884c\u6240\u5360\u7684\u5b57\u7bc0\u6578<\/p>\n<p>height:\u5716\u50cf\u7684\u9ad8\u5ea6<\/p>\n<p>bool Flip_Targa(UCHAR *image, int bytes_per_line, int height)<\/p>\n<p>{<\/p>\n<p>UCHAR *buffer; \/\/\u7528\u65bc\u81e8\u6642\u4fdd\u5b58\u4f4d\u5716\u6578\u64da.<\/p>\n<p>int index;\u00a0\u00a0\u00a0\u00a0 \/\/\u5faa\u74b0\u8a08\u6578<\/p>\n<p>\/\/\u6839\u64da\u4f4d\u5716\u5f71\u50cf\u7684\u5927\u5c0f\u751f\u8acb\u7a7a\u9593<\/p>\n<p>buffer = (UCHAR <em>)malloc(bytes_per_line<\/em>height);<\/p>\n<p>if (buffer == NULL)<\/p>\n<p>return false;<\/p>\n<p>\/\/ \u4f4d\u5716\u62f7\u8c9d<\/p>\n<p>memcpy(buffer, image, bytes_per_line*height);<\/p>\n<p>\/\/ \u5782\u76f4\u985b\u5012\u5716\u7247<\/p>\n<p>for (index = 0; index &lt; height; index++)<\/p>\n<p>memcpy(&amp;image[((height &#8211; 1) &#8211; index)<em>bytes_per_line], &amp;buffer[index<\/em>bytes_per_line], bytes_per_line);<\/p>\n<p>\/\/\u91cb\u653e\u81e8\u6642\u7a7a\u9593<\/p>\n<p>free(buffer);<\/p>\n<p>return true;\/\/\u8fd4\u56de<\/p>\n<p>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u300eTarga\u300f\u662f\u5e38\u7528\u65bc3D\u7d0b\u7406\u7684\u300e.tga\u300f\u5716\u6a94,\u5b83\u8207\u300eBitmap\u300f\u6700\u5927\u7684\u5206\u5225\u662f\u7d22\u5f15\u3001RGB\u3001\u7070\u5ea6\u5747\u652f\u6301RL &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/opengl_read_targa_file\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">OpenGL\u4e4b\u8b80\u53d6Targa\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-3805","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\/3805","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=3805"}],"version-history":[{"count":7,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3805\/revisions"}],"predecessor-version":[{"id":3994,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/3805\/revisions\/3994"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=3805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=3805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=3805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}