コード例 #1
0
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;
	}
}
コード例 #2
0
ファイル: writelog.c プロジェクト: LCAD-UFES/carmen_lcad
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);
}