void convert_kinect_meters_to_rgb (float meters, uchar *r, uchar *g, uchar *b, unsigned short int *m_gamma) { int depth = convert_kinect_depth_meters_to_raw(meters); int pval = m_gamma[depth]; int lb = pval & 0xff; switch (pval >> 8) { case 0: *r = 255; *g= 255-lb; *b = 255-lb; break; case 1: *r = 255; *g= lb; *b = 0; break; case 2: *r = 255-lb; *g= 255; *b = 0; break; case 3: *r = 0; *g= 255; *b = lb; break; case 4: *r = 0; *g= 255-lb; *b = 255; break; case 5: *r = 0; *g= 0; *b = 255-lb; break; default: *r = 0; *g= 0; *b = 0; break; } }
void carmen_logwrite_write_kinect_depth(carmen_kinect_depth_message *kinect, int kinect_num, carmen_FILE *outfile, double timestamp) { int i, j; unsigned short depth_value; carmen_fprintf(outfile, "RAW_KINECT_DEPTH%d ", kinect_num); carmen_fprintf(outfile, "%d ", kinect->width); carmen_fprintf(outfile, "%d ", kinect->height); carmen_fprintf(outfile, "%d ", kinect->size); if (hex_char_depth_kinect == NULL) { hex_char_depth_kinect = (char *) malloc((4 * kinect->size) * sizeof(char)); for (i=0; i < 16; i++) { if (i <= 9) int_to_nibble_hex[i] = '0' + i; else int_to_nibble_hex[i] = 'a' + i - 10; } } for(i=j=0; i<(kinect->size); i++, j+=4) { depth_value = convert_kinect_depth_meters_to_raw(kinect->depth[i]); hex_char_depth_kinect[j] = GET_SHORT_FIRST_NIBBLE(depth_value); hex_char_depth_kinect[j+1] = GET_SHORT_SECOND_NIBBLE(depth_value); hex_char_depth_kinect[j+2] = GET_SHORT_THIRD_NIBBLE(depth_value); hex_char_depth_kinect[j+3] = GET_SHORT_FOURTH_NIBBLE(depth_value); } carmen_fwrite(hex_char_depth_kinect, (4 * kinect->size), 1, outfile); carmen_fprintf(outfile, "%f %s %f\n", kinect->timestamp, kinect->host, timestamp); }